小程序 picker多列选择器

picker多列选择器的使用
在这里插入图片描述

 <view class="section">
  <view class="section__title">多列选择器</view>
  <picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange"
    value="{{multiIndex}}" range-key="name" range="{{multiArray}}">
    <view class="picker">
      当前选择:{{first}},{{second}}
    </view>
  </picker>
</view>
data:{
	first:"",
    second:"",
    multiId: 0,
    multiIndex: [0, 0],
    // 修改成pick组件所需要的数据格式
     multiArray: [],
    // 后台返回的数据格式
    resultTemp: [
      {
        id: 1,
        name: "上海校区",
        son: [
          {
            id: 11,
            name: "一班" //与外层的key保持一致 例如name
          },
          {
            id: 12,
            name: "二班"
          },
          {
            id: 13,
            name: "三班"
          }
        ]
      },
      {
        id: 2,
        name: "北京校区",
        son: [
          {
            id: 21,
            name: "四班"
          },
          {
            id: 22,
            name: "五班"
          },
          {
            id: 23,
            name: "六班"
          }
        ]
      },
    ],
     
}

 onLoad() {
   //拿到后台返回数据之后 将数据格式转换成pick多列选择器需要的格式
   // multiArray: [['上海校区', '北京校区'], ['一班', '二班', '三班']],
   this.getMultiArray() //获取后台数据之后 调用此方法  (此处是在data里面写的静态假数据,所以在onload里面调用了此方法 ) 
  },
  
 getMultiArray(){
	let firstArray = []
    let secondArray = []
    let multiArray = []
    this.data.resultTemp.forEach(item => {
      let groupObj = {
        id: item.id,
        name: item.name
      }
      firstArray.push(groupObj)
      secondArray.push(item.son) 
    })
    multiArray[0] = firstArray
    multiArray[1] = secondArray[0]
    this.setData({
      multiArray: multiArray,
      multiId: multiArray[0][0].id,
      first:multiArray[0][0].name,
      second:multiArray[1][0].name
    })
 },
	
  // value 改变时触发 change 事件,event.detail = {value}
  bindMultiPickerChange: function (e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    this.setData({
      multiIndex: e.detail.value,
      first:this.data.multiArray[0][e.detail.value[0]].name,
      second:this.data.multiArray[1][e.detail.value[1]].name
    })
  },
  // 列改变时触发
  bindMultiPickerColumnChange(e) {
    console.log('修改的列为', e.detail.column, ',值为', e.detail.value);
    let data = {
      multiArray: this.data.multiArray,
      multiIndex: this.data.multiIndex
    };
    data.multiIndex[e.detail.column] = e.detail.value;
    switch (e.detail.column) {
      case 0:
        let multiId = this.data.multiArray[0][e.detail.value].id
        // 根据校区id 查找到对象的班级  修改multiArray数据值
        this.data.resultTemp.forEach(item => {
          if (item.id == multiId) {
            this.data.multiArray[1] = item.son
          }
        })
        this.setData({
          multiArray: this.data.multiArray
        })
        data.multiIndex[1] = 0;
        break;
    }
  },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值