Skip to content

Picker 选择器 ​

uvx-picker 在底部弹层中提供单列、多列和联动滚轮选择,支持字符串、数字及对象选项和完整的实例方法。

平台兼容性 ​

AndroidiOS鸿蒙H5微信
3.9+4.11+4.61+4.0+4.41+

平台能力 ​

能力AndroidiOS鸿蒙H5微信
单列、多列、对象选项和默认索引√√√√√
加载状态、工具栏、遮罩和圆角√√√√√
动态列数据与查询方法√√√√√

使用须知

  1. columns 必须是二维数组,每个内层数组对应一列;对象选项使用 key-name 读取显示文本。
  2. default-index、列数据和方法返回值都会由组件复制,业务侧不应依赖引用相等。
  3. change 的 columnIndex 是本次变化列,index 是该列新索引;value 是所有列当前选中项。
  4. confirm 的 innerIndex 名称来自当前类型定义,但实际值是当前选中项数组,不是索引数组;索引使用 indexs。
  5. setColumnValues 更新指定列后,会把其后各列索引重置为 0,适合联动选择。

基础用法 ​

vue
<uvx-picker
   ref="picker"
   :columns="columns"
   @confirm="handleConfirm"
></uvx-picker>
uts
import type { Column, Columns, ConfirmEvent } from "@/uni_modules/uvx-ui/components/uvx-picker/types/index.uts";

const picker = ref<UvxPickerComponentPublicInstance | null>(null);

const columns = ref<Columns>([["中国", "美国", "日本"] as Column]);

const handleConfirm = (event: ConfirmEvent): void => {
   console.log("确认选择:", event.innerIndex);
};

多列选择 ​

uts
import type { Column, Columns } from "@/uni_modules/uvx-ui/components/uvx-picker/types/index.uts";

const columns = ref<Columns>([
   ["上午", "下午"] as Column,
   ["1:00", "2:00", "3:00"] as Column,
]);

对象选项 ​

vue
<uvx-picker
   ref="picker"
   :columns="regionColumns"
   key-name="name"
></uvx-picker>

联动选择 ​

uts
import type { ChangeEvent, Column, Columns } from "@/uni_modules/uvx-ui/components/uvx-picker/types/index.uts";

const picker = ref<UvxPickerComponentPublicInstance | null>(null);

// 联动第二列数据
const CHILD_COLUMNS: Columns = [
   ["深圳", "厦门", "上海", "拉萨"] as Column,
   ["得州", "华盛顿", "纽约", "阿拉斯加"] as Column,
];

const handleChange = (event: ChangeEvent): void => {
   if (event.columnIndex == 0) {
      picker.value?.setColumnValues(1, CHILD_COLUMNS[event.index]);
   }
};

加载和样式 ​

vue
<uvx-picker
   ref="picker"
   title="选择地区"
   :columns="columns"
   :loading="loading"
   :round="12"
   active-color="#3c9cff"
></uvx-picker>

实例控制 ​

uts
const picker = ref<UvxPickerComponentPublicInstance | null>(null);

picker.value?.open();
picker.value?.setIndexs([1, 0], true);
const values = picker.value?.getValues();
const indexs = picker.value?.getIndexs();
picker.value?.close();

API ​

Props ​

属性说明类型默认值平台
show-toolbar是否显示顶部工具栏booleantrue全部
title工具栏标题string""全部
round底部弹层圆角string | number0全部
columns选择器列数据Columns[]全部
loading是否显示加载遮罩并阻止滚轮交互booleanfalse全部
item-height单个选项高度,单位 pxnumber44全部
cancel-text / confirm-text工具栏国际化按钮文字string取消 / 确定全部
cancel-color / confirm-color取消/确认文字颜色string""全部
color / active-color普通/选中项文字颜色string""全部
visible-item-count每列可见选项数量number5全部
key-name对象选项显示字段stringtext全部
close-on-click-overlay点击遮罩是否关闭booleantrue全部
close-on-click-confirm点击确认后是否关闭booleantrue全部
default-index各列默认索引number[][]全部
u-style选择器内容样式,CSS 字符串string""全部
u-class选择器内容追加类名string""全部

Events ​

事件说明参数平台
confirm点击确认时触发ConfirmEvent全部
cancel点击取消时触发-全部
close内部弹层关闭后触发-全部
change滚轮选项变化时触发ChangeEvent全部

Methods ​

方法说明参数返回值
open() / close()打开或关闭选择器-void
setIndexs(indexs, shouldSetLastIndex?)设置各列索引number[], booleanvoid
setLastIndex(indexs)设置变化比较基准索引number[]void
setColumnValues(columnIndex, values)更新指定列并重置后续列索引number, Columnvoid
getColumnValues(columnIndex)获取指定列数据副本numberColumn
getValues()获取当前选中项副本-Item[]
getIndexs()获取当前索引副本-number[]

ChangeEvent ​

字段说明类型
value所有列当前选中项Item[]
index本次变化列的新索引number
indexs所有列当前索引number[]
values当前完整列数据Columns
columnIndex本次变化的列索引number

参考 ​

uvx-ui · uni-app x 组件库