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

1、 需求:省市选择器。

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

实现原理: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();
 }

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值