# mx-picker 选择器
提供多个选项集合供用户选择,支持单列选择和多列级联,通常与 弹出层 组件配合使用。
# 引入
在app.json或index.json中引入组件,详细介绍见快速上手
"usingComponents": {
  "mx-picker": "/miniprogram_npm/m-ui/mx-picker/index"
}
# 小程序码
可使用微信扫码查看小程序码
#
 # 代码演示
# 基本用法
<mx-picker
    bind:confirm="toggleActionSheet"
    bind:cancel="toggleActionSheet"
    bind:close="toggleActionSheet"
    description="请选择城市"
    show="{{ show }}"
    columns="{{ column }}"
    bind:change="onChange"
    />
Page({
  data: {
    show: false,
    column: ['北京', '上海', '深圳', '广州', '佛山', '杭州'],
  },
  
 toggletype(type) {
    console.log(type)
    this.setData({
      [type]: !this.data[type],
    })
  },
   
  toggleActionSheet() {
    this.toggletype('show')
  },
  onChange(event) {
    const { value } = event.detail
    this.setDta({
      value1: value,
    })
  },
});
# 默认选中项
单列选择器可以直接通过default-index属性设置初始选中项的索引值。
<mx-picker
    bind:confirm="toggleActionSheet"
    bind:cancel="toggleActionSheet"
    bind:close="toggleActionSheet"
    description="请选择城市"
    default-index="{{ 2 }}"
    show="{{ show }}"
    columns="{{ column }}"
    bind:change="onChange"
    />
# 展示顶部栏描述,以及选中栏描述
通过 description 设置顶部描述,通过select-description设置选中栏描述
<mx-picker
      bind:confirm="toggleActionSheet2"
      bind:cancel="toggleActionSheet2"
      bind:close="toggleActionSheet2"
      description="设备预计在今天上午 13:00 关机"
      select-description="后关机"
      default-index="{{ 2 }}"
      show="{{ show }}"
      columns="{{ column }}"
      bind:change="onChange"
    />
# 多列联动
设置description属性后,会在选项上方显示描述信息。
<mx-picker
      bind:confirm="toggleActionSheet"
      bind:cancel="toggleActionSheet"
      bind:close="toggleActionSheet"
      description="请选择城市"
      default-index="{{ 2 }}"
      show="{{ show }}"
      columns="{{ column }}"
      bind:change="onChange"
    />
Page({
  data: {
    show: false,
    column:  [
      {
        values: ['广东', '浙江', '福建'],
        className: 'column1',
      },
      {
        values: ['深圳', '广州', '佛山', '杭州', '宁波', '温州', '嘉兴', '湖州'],
        className: 'column2',
        defaultIndex: 2,
      },
      {
        values: ['南山', '福田', '罗湖', '龙岗', '宝安'],
        className: 'column3',
        defaultIndex: 3,
      },,
  },
  
 toggletype(type) {
    console.log(type)
    this.setData({
      [type]: !this.data[type],
    })
  },
   
  toggleActionSheet() {
    this.toggletype('show')
  },
  onChange(event) {
    const { value } = event.detail
    this.setDta({
      value1: value,
    })
  },
});
# 禁用选项
选项可以为对象结构,通过设置 disabled 来禁用该选项。
<mx-picker
    bind:confirm="toggleActionSheet"
    bind:cancel="toggleActionSheet"
    bind:close="toggleActionSheet"
    description="请选择城市"
    show="{{ show }}"
    columns="{{ column }}"
    bind:change="onChange"
    />
Page({
  data: {
    show: false,
    column:: [
      { text: '北京', disabled: true },
      { text: '上海' },
      { text: '深圳' },
      { text: '广州', disabled: true },
      { text: '佛山' },
    ],
  },
  
 toggletype(type) {
    console.log(type)
    this.setData({
      [type]: !this.data[type],
    })
  },
   
  toggleActionSheet() {
    this.toggletype('show')
  },
  onChange(event) {
    const { value } = event.detail
    this.setDta({
      value1: value,
    })
  },
});
# 默认选中项
当 Picker 数据是通过异步获取时,可以通过 loading 属性显示加载提示。
<mx-picker
    bind:confirm="toggleActionSheet"
    bind:cancel="toggleActionSheet"
    bind:close="toggleActionSheet"
    description="请选择城市"
    default-index="{{ 2 }}"
    show="{{ show }}"
    loading
    columns="{{ column }}"
    bind:change="onChange"
    />
# API
# Props
| 参数 | 说明 | 类型 | 默认值 | 
|---|---|---|---|
show |  是否显示动作面板 | boolean | false | 
z-index |  z-index 层级 | string、 number | 100 | 
description |  选项上方的描述信息 | string | - | 
columns |  对象数组,配置每一列显示的数据 | Array | [] | 
loading |  是否显示加载状态 | boolean | false | 
value-key |  选项对象中,文字对应的 key | string | text | 
item-height |  选项高度 | number | 44 | 
confirm-button-text |  确认按钮文字 | string | 确认 | 
cancel-button-text |  取消按钮文字 | string | 取消 | 
visible-item-count |  可见的选项个数 | number | 6 | 
default-index |  单列选择器的默认选中项索引, | ||
| 多列选择器请参考下方的 Columns 配置 | number | 0 |  |
select-description |  选中项的描述信息 | string | - | 
# Events
Picker 组件的事件会根据 columns 是单列或多列返回不同的参数。
| 事件名 | 说明 | 参数 | 
|---|---|---|
bind:confirm |  点击确定按钮时触发 | 单列:选中值,选中值对应的索引,多列:所有列选中值,所有列选中值对应的索引 | 
bind:close |  关闭时触发 | - | 
bind:cancel |  取消按钮点击时触发 | 单列:选中值,选中值对应的索引,多列:所有列选中值,所有列选中值对应的索引 | 
bind:change |  选项改变时触发 | 单列:Picker 实例,选中值,选中值对应的索引,多列:Picker 实例,所有列选中值,当前列对应的索引 | 
# Columns 数据结构
当传入多列数据时,columns为一个对象数组,数组中的每一个对象配置每一列,每一列有以下key。
| Keys | 说明 | 
|---|---|
values |  列中对应的备选值 | 
defaultIndex |  初始选中项的索引,默认为 0 | 
# 外部样式类
| 名称 | 说明 | 
|---|---|
custom-class |  根节点样式类 | 
active-class |  选中项样式类 | 
column-class |  列样式类 | 
# 方法
通过 selectComponent 可以获取到 picker 实例并调用实例方法。
| 方法名 | 参数 | 返回值 | 介绍 | 
|---|---|---|---|
getValues |  - | values | 获取所有列选中的值 | 
setValues |  values | - | 设置所有列选中的值 | 
getIndexes |  - | indexes | 获取所有列选中值对应的索引 | 
setIndexes |  indexes | - | 设置所有列选中值对应的索引 | 
getColumnValue |  columnIndex | value | 获取对应列选中的值 | 
setColumnValue |  columnIndex, value | - | 设置对应列选中的值 | 
getColumnIndex |  columnIndex | optionIndex | 获取对应列选中项的索引 | 
setColumnIndex |  indecolumnIndex, optionIndexxes | - | 设置对应列选中项的索引 | 
getColumnValues |  columnIndex | values | 获取对应列中所有选项 | 
setColumnValues |  columnIndex, values | - | 设置对应列中所有选项 |