Skip to content

Picker 选择器

介绍

提供多列滚动选择功能,支持单列、多列及级联选择,适用于地址、时间、分类等场景。

引入

typescript
import { TnPicker } from "@tuniao/tn-ui";

代码演示

基础用法

通过 data 属性传入选项数据,监听 onConfirm 获取选中结果。每列数据为 TnPickerColumnItem[] 数组。

基础用法

点我查看代码
typescript
import { TnPicker, TnPickerColumnItem, TnPickerValueType } from "@tuniao/tn-ui";

@Entry
@ComponentV2
struct PickerBasic {
  @Local open: boolean = false;
  @Local value: TnPickerValueType = "";
  @Local data: TnPickerColumnItem[][] = [
    [
      { label: "选项一", value: "1" },
      { label: "选项二", value: "2" },
      { label: "选项三", value: "3" }
    ],
  ];

  build() {
    Column() {
      Button("打开选择器")
        .onClick(() => {
          this.open = true;
        })
      TnPicker({
        modelValue: this.value,
        open: this.open,
        data: this.data,
        onConfirm: (value: TnPickerValueType, index: number[]) => {
          this.value = value;
          this.open = false;
        },
        onClose: () => {
          this.open = false;
        },
      })
    }
  }
}

多列选择

data 属性传入多个数组即可实现多列选择。

多列选择

点我查看代码
typescript
@Local multiData: TnPickerColumnItem[][] = [
  [
    { label: "星期一", value: "mon" },
    { label: "星期二", value: "tue" },
    { label: "星期三", value: "wed" },
    { label: "星期四", value: "thu" },
    { label: "星期五", value: "fri" },
    { label: "星期六", value: "sat" },
    { label: "星期日", value: "sun" }
  ],
  [
    { label: "上午", value: "am" },
    { label: "下午", value: "pm" },
    { label: "晚上", value: "evening" }
  ]
];

TnPicker({
  modelValue: this.value,
  open: this.open,
  data: this.multiData,
  onConfirm: (value: TnPickerValueType, index: number[]) => {
    this.value = value;
    this.open = false;
  },
  onClose: () => {
    this.open = false;
  },
})

级联选择

通过 cascadeData 属性传入带 children 的树形数据,实现级联联动选择。

级联选择

点我查看代码
typescript
@Local cascadeData: TnPickerColumnItem[] = [
  {
    label: "中餐", value: "chinese", children: [
    {
      label: "川菜", value: "sichuan", children: [
      { label: "麻婆豆腐", value: "mapo_tofu" },
      { label: "回锅肉", value: "twice_cooked_pork" },
      { label: "水煮鱼", value: "boiled_fish" }
    ]
    },
    {
      label: "粤菜", value: "cantonese", children: [
      { label: "白切鸡", value: "white_cut_chicken" },
      { label: "烧鹅", value: "roast_goose" },
      { label: "叉烧", value: "char_siu" }
    ]
    }
  ]
  },
  {
    label: "西餐", value: "western", children: [
    {
      label: "意餐", value: "italian", children: [
      { label: "披萨", value: "pizza" },
      { label: "意面", value: "pasta" },
      { label: "烩饭", value: "risotto" }
    ]
    },
    {
      label: "法餐", value: "french", children: [
      { label: "牛排", value: "steak" },
      { label: "鹅肝", value: "foie_gras" },
      { label: "蜗牛", value: "escargot" }
    ]
    }
  ]
  },
  {
    label: "日料", value: "japanese", children: [
    {
      label: "寿司", value: "sushi", children: [
      { label: "三文鱼寿司", value: "salmon_sushi" },
      { label: "金枪鱼寿司", value: "tuna_sushi" }
    ]
    },
    {
      label: "拉面", value: "ramen", children: [
      { label: "豚骨拉面", value: "tonkotsu" },
      { label: "味噌拉面", value: "miso" }
    ]
    }
  ]
  }
];

TnPicker({
  modelValue: this.value,
  open: this.open,
  cascadeData: this.cascadeData,
  onConfirm: (value: TnPickerValueType, index: number[]) => {
    this.value = value;
    this.open = false;
  },
  onClose: () => {
    this.open = false;
  },
})

自定义按钮文字

通过 cancelTextconfirmText 属性自定义取消和确认按钮的文字,通过 title 属性设置标题。

点我查看代码
typescript
TnPicker({
  modelValue: this.value,
  open: this.open,
  data: this.data,
  title: "请选择水果",
  cancelText: "返回",
  confirmText: "完成",
  onConfirm: (value: TnPickerValueType, index: number[]) => {
    this.value = value;
    this.open = false;
  },
  onCancel: () => {
    this.open = false;
  },
  onClose: () => {
    this.open = false;
  },
})

API

TnPickerColumnItem 数据结构

字段说明类型必填
label选项显示文本string
value选项值string | number
children子选项(级联模式)TnPickerColumnItem[]

Props

参数说明类型默认值
modelValue当前选中值TnPickerValueType-
open是否打开选择器booleanfalse
data列数据(非级联模式)TnPickerColumnItem[][]-
cascadeData级联数据TnPickerColumnItem[]-
showCancel是否显示取消按钮booleantrue
cancelText取消按钮文字string"取消"
showConfirm是否显示确认按钮booleantrue
confirmText确认按钮文字string"确定"
title标题string-

类型定义

typescript
type TnPickerValueType = string | number | Array<string | number>;

Events

事件名说明回调参数
onConfirm点击确认按钮时触发(value: TnPickerValueType, index: number | number[]) => void
onCancel点击取消按钮时触发() => void
onClose选择器关闭时触发() => void
onChange选项变化时触发(value: TnPickerValueType, index: number | number[]) => void