微信小程序picker多列选择器 详解

PS:multiArray:是一个二维数组,其中有几个元素,证明是几列选择器;初始化存放的是“各列”默认数据,随着操作变化,multiArray动态存放当前选中数据对应的各列数据。(语言表达能力太差了,希望大家结合程序能看懂)

multiIndex:是一维数组,用来存放各列选中值的下标。

以下代码为官方示例,代码中进行了注释。

wxml页面:

 <picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}">
    <view class="picker">
    <!--3列的默认值 multiArray[0][0],multiArray[1][0],multiArray[1][0]  -->
        {{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}}
     </view>
 </picker>

js页面:

  /**
   * 页面的初始数据
   */
  data: {
    index: 0,
    //multiArray是二维数组,picker多列选择器只支持二维数组
    multiArray: [['无脊柱动物', '脊柱动物'], ['扁性动物', '线形动物', '环节动物', '软体动物', '节肢动物'], ['猪肉绦虫', '吸血虫']],  
     //multiIndex一维数组,存放各列选中的值下标
    //默认值multiIndex: [0, 0, 0],其中第一个0表示选中multiArray[0][0]‘无脊柱动物’,第二个0表示选中multiArray[1][0]'扁性动物',第三个0表示选中multiArray[2][0]'猪肉绦虫'
    multiIndex: [0, 0, 0]
  },

  //bindMultiPickerChange选完数据,点击确定后触发
  bindMultiPickerChange: function (e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    this.setData({
      multiIndex: e.detail.value
    })
  },
  //bindMultiPickerColumnChange 选完一列,则在当前列触发一次
  bindMultiPickerColumnChange: function (e) {
    console.log('修改的列为', e.detail.column, ',值为', e.detail.value);
    var data = {
      multiArray: this.data.multiArray,
      multiIndex: this.data.multiIndex
    };
    //e.detail.column  取值范围 0 1 2
    //记录当前选择列的值的下标
    data.multiIndex[e.detail.column] = e.detail.value;    
    //根据当前选择的列,联动更新后面两列的值,当e.detail.column=3时,上面一句完成赋值后,跳过下面switch,
    switch (e.detail.column) {
      case 0://当前滑动操作了第0列===============
        switch (data.multiIndex[0]) {
          case 0://无脊柱动物
            data.multiArray[1] = ['扁性动物', '线形动物', '环节动物', '软体动物', '节肢动物'];
            data.multiArray[2] = ['猪肉绦虫', '吸血虫'];
            break;
          case 1://脊柱动物
            data.multiArray[1] = ['鱼', '两栖动物', '爬行动物'];
            data.multiArray[2] = ['鲫鱼', '带鱼'];
            break;
        }
        //后面两列默认值都为第0个元素
        data.multiIndex[1] = 0;
        data.multiIndex[2] = 0;
        break;
      case 1://当前滑动操作了第1列===============
        switch (data.multiIndex[0]) {
          case 0://无脊柱动物
            switch (data.multiIndex[1]) {
              case 0://扁形动物
                data.multiArray[2] = ['猪肉绦虫', '吸血虫'];
                break;
              case 1://线形动物
                data.multiArray[2] = ['蛔虫'];
                break;
              case 2://环节动物
                data.multiArray[2] = ['蚂蚁', '蚂蟥'];
                break;
              case 3://软体动物
                data.multiArray[2] = ['河蚌', '蜗牛', '蛞蝓'];
                break;
              case 4:
                data.multiArray[2] = ['昆虫', '甲壳动物', '蛛形动物', '多足动物'];
                break;
            }
            break;
          case 1://脊柱动物
            switch (data.multiIndex[1]) {
              case 0:
                data.multiArray[2] = ['鲫鱼', '带鱼'];
                break;
              case 1:
                data.multiArray[2] = ['青蛙', '娃娃鱼'];
                break;
              case 2:
                data.multiArray[2] = ['蜥蜴', '龟', '壁虎'];
                break;
            }
            break;
        }
        data.multiIndex[2] = 0;
        break;
    }
    console.log(data.multiIndex);
    this.setData(data);
  },

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尔滨•杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值