小程序循环多个picker选择器,实现动态增、减

现象

循环picker选择器,改变一个下拉框选项,导致全部下拉框选项改变;

问题

怎样操作才能实现只改变当前操作的下拉框的值?

思路

在js中设置一个数组变量,存储每个picker选择器默认的值;然后根据bingchange获取相应的索引、e.detail.value,根据这些更新数组,重新赋值,然后根据

数组的索引、值更新相应的picker索引以及值。

wxml

 1 <block wx:for="{{salesList}}" wx:for-index="index" wx:key="id" wx:for-item="item">
 2       <view class="con_txt">
 3         <view class="con_txt1" style="margin-left:30rpx;width:140rpx">销售品申请</view>
 4         <view class="con_txt1 con_txt2">
 5           <view class="section">
 6             <picker bindchange="bindPickerChange" value="{{item.option}}" range="{{objectArray}}" range-key="good_name" data-id="{{objectArray[item.option].id}}" data-index="{{index}}">
 7               <view class="picker" style="height:70rpx;position:relative">
 8                 {{objectArray[item.option].good_name}}
 9                 <image src="../Image/select.png" style="width:40rpx;height:40rpx;position:absolute;left:80%;top:20%;"></image>
10               </view>
11             </picker>
12           </view>
13         </view>
14         <view class="con_txt1">
15           <view class="section2">
16             <input  value="{{salesList[index].nums}}" name="count" bindinput="numChangeS" data-index="{{index}}" style="text-align:center;height:66rpx !important;padding-top:4rpx;"  placeholder-style="color:#ddd;text-align:center;margin-top: 0px;margin-left:-8rpx" placeholder="数量"/>
17           </view>
18         </view>
19         <button class="btnC" hover-class="none" bindtap="reduceSales" data-index="{{index}}">-</button>
20       </view>
21     </block>
22     <view class="hb" bindtap="addSales">
23       <image src="../Image/addT.png" style="width:30rpx;height:30rpx;float:left;margin-left:38%;"></image>
24       <view class="text3">继续增加商品</view>
25     </view>

js

 1 data: {
 2     salesList: []    //定义一个空数组
 3   },
 4 //销售品删除一行
 5   reduceSales: function (e) {
 6     var that = this;
 7     var index = e.currentTarget.dataset.index;
 8     var list = that.data.salesList;
 9     if (list.length === 1) {
10       return;
11     }
12     list.splice(index, 1);
13     this.setData({
14       salesList: list
15     })
16   },
17 //点击添加销售品
18   addSales: function (e) {
19     var that = this;
20     var list = that.data.salesList;
21     var r = /^\+?[1-9][0-9]*$/;  //正整数 
22     var tip = '数量请输入正整数~~';
23     for (var i = 0; i < list.length; ++i) {
24       if (list[i].nums <= 0 || !r.test(list[i].nums)) {
25         wx.showToast({
26         title: tip,
27         image: '../Image/error.png',
28         duration: 2000
29       });
30       return;
31       }
32     }
33     var options = this.data.objectArray
34     this.data.salesList.push({ id: options[0].id, nums: '', option: 0 })  //添加新行的时候nums初始为0
35     this.setData({
36       salesList: this.data.salesList
37     })
38 
39   },
40 //销售品申请类
41   bindPickerChange: function (e) {
42     var arr = this.data.objectArray  //数组;
43    var value = e.detail.value;     //数组子集
44     var list = this.data.salesList;   //数组传递某一项的容器
45    var index = e.currentTarget.dataset.index;  //索引
46 
47     list[index] = arr[value] //被选中数组的某一项赋给容器的相对应的某一项容器
48 
49     list[index].option = value  //数组子集赋给某一项相对应的容器索引
50   this.setData({
51       salesList: list
52     })
53   },
54   //申请数量
55   numChangeS: function (e) {
56     var _that = this;
57     var index = e.currentTarget.dataset.index;
58     var list = this.data.salesList
59     list[index].nums = e.detail.value
60     this.setData({
61       salesList: list
62     })
63   },
64 
65 // 页面初始化 options为页面跳转所带来的参数
66   onLoad: function (options) {
67     var that = this
68     wx.request({
69       url: 'https://....',
70       method: 'GET',
71       header: { 'content-type': 'application/json' },
72       data: {},
73       success: function (res) {   // success
74         var options = res.data.goods;
75         that.data.salesList.push({ id: options[0].id, nums: '', option: 0 })
76         that.data.materielList.push({ id: options[0].id, nums: '', option: 0 })
77         that.data.activesList.push({ id: options[0].id, option: 0 })
78         that.setData({
79           objectArray: options,
80           salesList: that.data.salesList,
81         })
82       },
83     })
84   },

参考网址:https://www.cnblogs.com/JinQing/p/6673665.html

猜你喜欢

转载自www.cnblogs.com/yanduanduan/p/9072342.html