程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 原生微信小程序

  • uniapp多端开发

    • 快速入门

    • 内置组件

      • 视图容器

      • 基础内容

      • 表单组件

        • 按钮组件
        • 复选框组件
        • 富文本编辑器组件
        • 表单组件
        • 输入框组件
        • 标签组件
        • 选择器组件
          • 1. 什么是 picker 组件?
          • 2. picker 组件的常用属性
            • 2.1 普通选择器
            • 2.2 多列选择器
            • 2.3 时间选择器
            • 2.4 日期选择器
            • 2.5 省市区选择器
          • 3. 平台差异与注意事项
          • 4. 扩展与优化
            • 4.1 动态数据加载
            • 4.2 使用增强版 Picker
          • 5. 选择器组件总结
            • 5.1 组件常见模式对比
            • 5.2 完整使用案例
        • 嵌入式选择器组件
        • 单选按钮组组件
        • 滑块选择器组件
        • 开关组件
        • 多行输入框组件
      • 路由页面跳转

      • 媒体组件

      • 地图

      • 画布

      • 网页嵌入

      • 页面属性配置节点

      • nvue组件

      • 小程序组件

    • 扩展组件

  • 小程序开发
  • uniapp多端开发
  • 内置组件
  • 表单组件
scholar
2024-10-21
目录

选择器组件

# 选择器组件

picker 是一个从底部弹出的滚动选择器,用于让用户在预设的选项中做出选择。它支持多种模式,通过 mode 属性来区分,包括普通选择器、多列选择器、时间选择器、日期选择器和省市区选择器。默认模式为普通选择器。

# 1. 什么是 picker 组件?

picker 组件用于从底部弹出一个滚动选择器供用户选择内容。支持的模式包括:

  • 普通选择器:单列选择。
  • 多列选择器:可以选择多列的内容。
  • 时间选择器:选择时间。
  • 日期选择器:选择日期。
  • 省市区选择器:选择地区。

使用场景

  • 选择时间、日期:如预订、日程安排等场景下选择具体的时间或日期。
  • 选择地区:选择省市区用于地址输入等场景。
  • 选择普通列表项:如选择性别、职业等单列数据。

# 2. picker 组件的常用属性

# 2.1 普通选择器

  • mode="selector" 普通单列选择器,用户从单列数据中选择一项。
属性名 类型 默认值 说明
range Array [] 提供给用户选择的选项列表,数组格式
range-key String 当 range 为 Array<Object> 时,指定对象中显示内容的 key
value Number 0 当前选择的索引值(从 0 开始计数)
disabled Boolean false 是否禁用选择器
@change Event 选项改变时触发,返回当前选择的索引值
@cancel Event 用户取消选择时触发
<template>
  <view>
    <picker :range="['选项一', '选项二', '选项三']" @change="onPickerChange">
      <view class="picker">当前选择: {{ selectedValue }}</view>
    </picker>
  </view>
</template>

<script setup>
const selectedValue = ref('选项一');

const onPickerChange = (e) => {
  const index = e.detail.value;
  selectedValue.value = ['选项一', '选项二', '选项三'][index];
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 2.2 多列选择器

  • mode="multiSelector" 支持多列数据选择,用户可以从每一列选择一项。
属性名 类型 默认值 说明
range Array [] 提供给用户选择的多列数据,二维数组
range-key String 当 range 为 Array<Object> 时,指定对象中显示内容的 key
value Array [] 当前选择的索引值,数组格式,每列对应一个索引
@change Event 选项改变时触发,返回当前选择的索引值
@columnchange Event 列改变时触发,返回改变的列索引及新的选项索引
@cancel Event 用户取消选择时触发
<template>
  <view>
    <picker mode="multiSelector" :range="multiArray" :value="multiIndex" @change="onMultiChange" @columnchange="onColumnChange">
      <view class="picker">当前选择: {{ multiArray[0][multiIndex[0]] }} - {{ multiArray[1][multiIndex[1]] }}</view>
    </picker>
  </view>
</template>

<script setup>
const multiArray = ref([['类别1', '类别2'], ['选项A', '选项B']]);
const multiIndex = ref([0, 0]);

const onMultiChange = (e) => {
  const indexes = e.detail.value;
  multiIndex.value = indexes;
};

const onColumnChange = (e) => {
  const column = e.detail.column;
  const value = e.detail.value;
  console.log(`第${column}列选择了第${value}项`);
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 2.3 时间选择器

  • mode="time" 用于选择时间(格式:hh:mm)。
属性名 类型 默认值 说明
value String 当前选中的时间,格式为 hh:mm
start String 有效时间范围的开始,格式为 hh:mm
end String 有效时间范围的结束,格式为 hh:mm
@change Event 时间改变时触发,返回选中的时间
@cancel Event 用户取消选择时触发
<template>
  <view>
    <picker mode="time" :value="time" start="09:00" end="18:00" @change="onTimeChange">
      <view class="picker">当前时间: {{ time }}</view>
    </picker>
  </view>
</template>

<script setup>
const time = ref('12:00');

const onTimeChange = (e) => {
  time.value = e.detail.value;
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 2.4 日期选择器

  • mode="date" 用于选择日期(格式:YYYY-MM-DD)。
属性名 类型 默认值 说明
value String 当前选中的日期,格式为 YYYY-MM-DD
start String 有效日期范围的开始,格式为 YYYY-MM-DD
end String 有效日期范围的结束,格式为 YYYY-MM-DD
@change Event 日期改变时触发,返回选中的日期
@cancel Event 用户取消选择时触发
<template>
  <view>
    <picker mode="date" :value="date" start="2020-01-01" end="2030-01-01" @change="onDateChange">
      <view class="picker">当前日期: {{ date }}</view>
    </picker>
  </view>
</template>

<script setup>
const date = ref('2023-01-01');

const onDateChange = (e) => {
  date.value = e.detail.value;
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 2.5 省市区选择器

  • mode="region" 用于选择省市区。
属性名 类型 默认值 说明
value Array [] 当前选中的省市区
@change Event 省市区改变时触发,返回选中的省市区
@cancel Event 用户取消选择时触发
<template>
  <view>
    <picker mode="region" :value="region" @change="onRegionChange">
      <view class="picker">当前选择: {{ region.join(' - ') }}</view>
    </picker>
  </view>
</template>

<script setup>
const region = ref(['广东省', '广州市', '天河区']);

const onRegionChange = (e) => {
  region.value = e.detail.value;
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 3. 平台差异与注意事项

  • 平台差异:不同平台的 picker 组件 UI 表现不同,如 App 和 H5 端默认调用原生选择器,而在小程序中是自定义的界面。
  • 注意事项:
    • picker 内容滚动时立即点击“确定”按钮,数据可能无法及时更新,建议等待滚动结束再确定。
    • 小程序的 multiSelector 支持多列选择,支付宝小程序不支持,需使用 picker-view 组件代替。

# 4. 扩展与优化

# 4.1 动态数据加载

当需要动态加载选择项(如省市区选择时逐级加载市和区数据),可以通过监听 @columnchange 事件并动态更新 range 的内容。

# 4.2 使用增强版 Picker

uni-ui 提供了增强版的 <uni-data-picker> 组件,支持更多列、数据懒加载和更复杂的表单场景,适合复杂选择需求。

# 5. 选择器组件总结

picker 组件通过提供多种选择模式(如单列、多列、时间、日期、地区等),极大地方便了用户选择输入。开发者可以根据不同的业务需求灵活选择和配置 picker 的各个模式和属性来满足具体的应用场景。

# 5.1 组件常见模式对比

模式 说明 使用场景
selector 普通单列选择器 选择性别、职业等单项选择
multiSelector 多列选择器 选择多列相关数据,如日期
time 时间选择器 选择特定时间点
date 日期选择器 选择日期
region 省市区选择器 地址选择

# 5.2 完整使用案例

<template>
  <view>
    <picker mode="date" :value="date" start="2020-01-01" end="2030-01-01" @change="onDateChange">
      <view class="picker">当前日期: {{ date }}</view>
    </picker>

    <picker mode="time" :value="time" start="09:00" end="18:00" @change="onTimeChange">
      <view class="picker">当前时间: {{ time }}</view>
    </picker>

    <picker mode="region" :value="region" @change="onRegionChange">
      <view class="picker">当前选择: {{ region.join(' - ') }}</view>
    </picker>
  </view>
</template>

<script setup>
const date = ref('2023-01-01');
const time = ref('12:00');
const region = ref(['广东省', '广州市', '天河区']);

const onDateChange = (e) => {
  date.value = e.detail.value;
};

const onTimeChange = (e) => {
  time.value = e.detail.value;
};

const onRegionChange = (e) => {
  region.value = e.detail.value;
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

recording

编辑此页 (opens new window)
上次更新: 2025/02/01, 02:18:15
标签组件
嵌入式选择器组件

← 标签组件 嵌入式选择器组件→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式