美文网首页
微信小程序之picker组件(多列选择器)

微信小程序之picker组件(多列选择器)

作者: 芒果加奶 | 来源:发表于2018-07-17 20:50 被阅读0次

1、 需求:省市选择器。

原生的省市区(mode=region)选择器只能获取汉字,不能定制每个省市的id,另外区选择器实际项目中没有使用到,思考下后选择手动修改多列选择器(mode=multiSelector)实现功能。

2、 实现效果

省市联动效果

3、代码

实现原理:multiArray是二维数组,省数据保存在二维数组第0个中,市数据切换放入二维数据第1个中,根据multiIndex确定选择项。
数据:省市是静态数据保存在config,数据格式下图

[{
    value: '110000',
    label: '北京市',
    level: 1,
    children: [
      {
        value: '110000',
        label: '北京市',
        level: 2
      }
    ]
  },
  {
    value: '500000',
    label: '重庆市',
    level: 1,
    children: [
      {
        value: '500000',
        label: '重庆市',
        level: 2
      }
    ]
  }]

wxml:

<picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}" range-key="label">
      <view class="picker">
        {{multiArray[0][multiIndex[0]].label}},{{multiArray[1][multiIndex[1]].label}}
      </view>
</picker>

首先在onload中获取数据塞在picker组件中

async onLoad() {
    this.multiArray = [[...city], [...city[0].children]];
    this.$apply();
}

之后监听bindMultiPickerColumnChange列change事件,滚动第一列更改第二列数据

bindMultiPickerColumnChange: function(e) {
      var data = {
        multiArray: this.data.multiArray,
        multiIndex: this.data.multiIndex
      };
      data.multiIndex[e.detail.column] = e.detail.value;
      switch (e.detail.column) {
        case 0:
          data.multiArray[1] = city[e.detail.value].children;
          break;
      }
      this.multiArray = this.data.multiArray;
      this.multiIndex = this.data.multiIndex;
      // 使用wepy开发,this.$apply()为脏数据检查
      this.$apply();
}

选择省市后获取选择选项,所有数据都保存在multiArray中

bindMultiPickerChange: function(e) {
      console.log(
        this.multiArray[0][e.detail.value[0]],
        this.multiArray[1][e.detail.value[1]]
      ); // {value: "431000", label: "郴州市", level: 2}
      this.multiIndex = e.detail.value;
      this.$apply();
 }

相关文章

网友评论

      本文标题:微信小程序之picker组件(多列选择器)

      本文链接:https://www.haomeiwen.com/subject/lzggpftx.html