小程序 多级联动picker + 按钮增加选项行

小程序 多级联动picker + 按钮增加选项行

问题描述:

img

如图,要做一个多级联动+增加行的功能

就是每一行都是一个多级联动,让客户选择,然后再一个按钮可以多一行,让客户再添加

现在多级联动已经做好了,就是小程序官网的模板改了改,增加一个行现在只是用了一个wx:for 循环,显然是不行的。。它只是重复显示了,但在任何一行修改之后,所有的数据都会变,我想要每一行都是独立的选项,应该再怎么改造一下?非常感谢!!求专家给点思路,谢谢


  addOneMoreRow(){
    let range=this.data.range
    range+=1
    this.setData({
      range:range
    })
  },

```html
<view class="section__title">多列选择器</view>
  <picker mode="multiSelector" bindchange="bindMultiPickerChange"  wx:for="{{range}}" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range-key="product_name" range="{{multiArray}}">
    <view class="picker">
      当前选择:{{multiArray[0][multiIndex[0]].product_name}}{{multiArray[1][multiIndex[1]].product_name}}
    </view>
  </picker>


```

当然要把multiIndex设置成二维数组,添加的时候multiIndex push一个默认一维数组(注意对象地址啥的不要一样了),给picker添加

value="{{multiIndex[index]}}" data-index="{{index}}"


```,触发绑定的函数获取dataset的index,修改multiIndex对应index的子数组

如果我的回答对你有帮助,请点击采纳按钮,谢谢

<picker
          mode="multiSelector"
          bindchange="bindjobcatchange"
          bindcolumnchange="bingjobcatcolumnchange"
          value="{{multiIndex}}"
          range="{{job_cat_list}}"
           range-key="{{'cat_name'}}"
        >
          <view class="picker">
            {{fenlei_title}}
          </view>
        </picker>

Page({
  data: {
    server_url: app.globalData.URL,
    fenlei_title:'分类',
    job_cat_list:[],
    multiIndex: [0,0,0],
    filter:{
      keywords:'',
      job_cat_id:''
    }
  },
  onLoad: function () {   
    this.jobcat();
  },
  jobcat: function() {
    var that = this;
    wx.request({
      url: app.globalData.URL + "/xxx/eeee",
      data: {
        x: '',
        y: ''
      },
      header: {
        'content-type': 'application/json' // 默认值
      },
      success: function (res) {
        var data = res.data.data;
        that.setData({
          job_cat_list: [data, data[0]['children'], data[0]['children'][0]['children']]
        });
      }
    });
  },
  bindjobcatchange: function(e){
    this.setData({multiIndex:e.detail.value})
  },
  bingjobcatcolumnchange: function(e){
    var index = this.data.multiIndex;
    const data = {
      job_cat_list: this.data.job_cat_list,
      multiIndex: this.data.multiIndex
    }
    this.data.multiIndex[e.detail.column] = e.detail.value;
 
    if (e.detail.column==0){
        data.job_cat_list[1] = this.data.job_cat_list[0][index[0]]['children'];
        data.job_cat_list[2] = data.job_cat_list[1][index[1]]['children'];
    }else if(e.detail.column===1){
        data.job_cat_list[2] = data.job_cat_list[1][index[1]]['children'];
        this.data.filter.job_cat_id = data.job_cat_list[2][index[2]]['cat_name'];
    }else if(e.detail.column===2){
      this.data.filter.job_cat_id=data.job_cat_list[2][e.detail.value]['cat_name'];
    }
 
    this.setData(data)
  }
 
})

    public function jobcate(){
        $zp_job_catModel = new ZpJobCat();
        $job_cat = $zp_job_catModel->getcateAll();
        $i=0;
        $return_data = [];
        foreach ($job_cat as $key=>$val){
            $return_data[$i] = $val;
            $return_data[$i]['children'] = [];
            if (!empty($val['children'])){
                $c=0;
                foreach ($val['children'] as $k=>$v){
                    $return_data[$i]['children'][$c] = $v;
                    if (!empty($v['children'])){
                        $return_data[$i]['children'][$c]['children'] = [];
                        $m=0;
                        foreach ($v['children'] as $val2){
                            $return_data[$i]['children'][$c]['children'][$m] = $val2;
                            $m++;
                        }
                    }
                    $c++;
                }
            }
            $i++;
        }
        $this->_success($return_data);
    }