# picker

滚动选择器。选择器包括一个或多个不同值的可滚动列表。

起始版本： 1.0.0

属性：  

|名称|类型|默认值|必填|描述|
|:---------|:----------|:-------|:-|:-------------------------------------------------------------------------------------------|
|mode|string|selector|否|选择器类型。 - selector：普通选择器。 - multiSelector：多列选择器。 - time：时间选择器。 - date：日期选择器。 - region：省市区选择器。|
|disabled|boolean|false|否|是否禁用。|
|bindcancel|eventhandle|-|否|取消选择时触发。|

除了上述通用的属性，对于不同的mode，picker会有不同的属性。  

#### 普通选择器

当mode = selector时，表示普通选择器。  

|名称|类型|默认值|描述|
|:---------|:---------------------------------|:---|:----------------------------------------------------------|
|range|Array\<string\> \| Array\<Object\>|\[\]|mode为selector或multiSelector时，range有效。|
|range-key|string|-|当range是一个Object Array时，通过range-key来指定Object中key的值作为选择器显示内容。|
|value|number|0|表示选择了range中的第几个（下标从0开始）。|
|bindchange|eventhandle|-|value改变时触发change事件，event.detail = {value}。|

#### 多列选择器

当mode = multiSelector时，表示多列选择器。  

|名称|类型|默认值|描述|
|:---------------|:---------------------------------|:---|:----------------------------------------------------------|
|range|Array\<string\> \| Array\<Object\>|\[\]|mode为selector或multiSelector时，range有效。|
|range-key|string|-|当range是一个Object Array时，通过range-key来指定Object中key的值作为选择器显示内容。|
|value|Array\<number\>|\[\]|表示选择了range中的第几个（下标从0开始）。|
|bindchange|eventhandle|-|value改变时触发change事件，event.detail = {value}。|
|bindcolumnchange|eventhandle|-|列改变时触发。|

#### 时间选择器

当mode = time时，表示时间选择器。  

|名称|类型|描述|
|:---------|:----------|:-------------------------|
|value|string|表示选中的时间，格式为"hh:mm"。|
|start|string|表示有效时间范围的开始，字符串格式为"hh:mm"。|
|end|string|表示有效时间范围的结束，字符串格式为"hh:mm"。|
|bindchange|eventhandle|value改变时触发change事件。|

#### 日期选择器

当mode = date时，表示日期选择器。  

|名称|类型|默认值|描述|
|:---------|:----------|:--|:-----------------------------------------|
|value|string|当天|表示选中的日期，格式为"YYYY-MM-DD"。|
|start|string|-|表示有效日期范围的开始，字符串格式为"YYYY-MM-DD"。|
|end|string|-|表示有效日期范围的结束，字符串格式为"YYYY-MM-DD"。|
|bindchange|eventhandle|-|value改变时触发change事件，event.detail = {value}。|

#### 省市区选择器

当mode = region时，表示省市区选择器。  

|名称|类型|默认值|描述|
|:---------|:--------------|:---|:----------------------------------------------------------------|
|value|Array\<string\>|\[\]|表示选中的省市区，默认选中每一列的第一个值。|
|bindchange|eventhandle|-|value改变时触发change事件，event.detail = {value, code}，其中字段code是统计用区划代码。|

示例：

hxml文件：

```
<view class="page-body">
  <view class="page-section">
  <view class="contentTitle">普通选择器</view>
  <view class="contentBody">
    <view class="contentKey">当前选择</view>
    <view class="contentVal">
    <picker
      bindchange="bindPickerChange"
      value="{{index}}"
      range="{{array}}">
      <view>{{array[index]}}</view>
    </picker>
    </view>
  </view>
  <view class="contentTitle">时间选择器</view>
  <view class="contentBody">
    <view class="contentKey">当前选择</view>
    <view class="contentVal">
    <picker
      mode="time"
      value="{{time}}"
      start="09:01"
      end="21:01"
      bindchange="bindTimeChange">
      <view>{{time}}</view>
    </picker>
    </view>
  </view>
  <view class="page-body">
    <view class="page-section">
    <view class="page-section-spacing">
      <picker mode="multiSelector"
        value="{{multiIndex}}"
        range="{{multiArray}}"
        bindchange="bindPickerChange"
        bindcolumnchange="bindColumnChange">
      <view class="picker">多列选择器</view>
      </picker>
    </view>
    </view>
  </view>
  </view>
</view>
```

js文件：

```
Page({
  data: {
    array: ['皮卡丘', '小火龙', '杰尼龟', '火恐龙'],
    index: 0,
    time: '12:01',
    multiIndex: [0, 0],
    // 多列选择器：
    multiArray: [['音频', '视频'], ['酷狗', '音乐']], // 二维数组，长度是多少是几列
  },
  bindPickerChange(event) {
    // event.detail内容举例为：{"value":""}
    console.info('picker组件的选择发生改变，携带值为', event.detail);
  },
  bindTimeChange(event) {
    // event.detail.value内容举例为：**:**
    console.info('picker组件mode为time时，选择发生改变，携带值为：', event.detail.value);
    this.setData({
      time: event.detail.value
    });
  },
  bindColumnChange(event) {
    // event.detail内容举例为：{"value":[],"column":""}
    console.info('picker组件列改变时触发，携带值为：', event.detail);
  }
});
```

