微信小程序——this.setData()动态修改数组中的某一值
微wx笑 2019-10-12【常见问题】 9 0关键字: 微信小程序
大家是不是都觉得微信小程序的开发方式和 vue react 这种框架的开发方式很像?
当操作一个列表时,有时候只需要修改某一行中某一列的值,这时如果对整个列表进行更新也可以,只是觉得这样太不地道,影响性能,所以就需要只更新数组中的某一值。
微信小程序——this.setData()动态修改数组中的某一值
大家是不是都觉得微信小程序的开发方式和 vue react 这种框架的开发方式很像?
当操作一个列表时,有时候只需要修改某一行中某一列的值,这时如果对整个列表进行更新也可以,只是觉得这样太不地道,影响性能,所以就需要只更新数组中的某一值。
列表数据 assetList
/** * 页面的初始数据 */ data: { assetList: [ { id: 1, assetName: '图书', num: 16, unit: '本', worth: 1.00, sltNum:0 }, { id: 2, assetName: '电脑', num: 10, unit: '台', worth: 1.00, sltNum: 0 }, { id: 3, assetName: '手机', num: 15, unit: '个', worth: 1.00, sltNum: 0 }, { id: 4, assetName: '笔', num: 19, unit: '个', worth: 1.00, sltNum: 0 }, { id: 5, assetName: '本', num: 6, unit: '本', worth: 1.00, sltNum: 0 }, ], },
wxml代码
<view wx:for="{{assetList}}" wx:key="id" class="section"> <view bindtap="setCount" data-id='{{item.id}}'> <label class="llabel">{{item.assetName}}</label> <label class="llabel">{{item.num}}{{item.unit}}</label> <button class="btnadd" data-id='{{item.id}}' data-idx="{{index}}" catchtap="btnDel">-</button> <input class="ipt" value="{{item.sltNum}}"></input> <button class="btnadd" data-id='{{item.id}}' data-idx="{{index}}" catchtap="btnAdd">+</button> </view> </view>
相关事件处理代码
btnAdd: function (e) { let itm = this.data.assetList[e.target.dataset.idx]; if (itm) { itm.sltNum += 1; if (itm.sltNum > itm.num) { itm.sltNum = itm.num; } let temp = 'assetList[' + e.target.dataset.idx + '].sltNum'; console.log(temp); this.setData({ [temp]: itm.sltNum, //注意 temp 需要用中括号括起来 }) } },
关键代码:
let temp = 'assetList[' + e.target.dataset.idx + '].sltNum'; [temp]: itm.sltNum, //注意 temp 需要用中括号括起来
temp的值打印出来类似:assetList[0].sltNum,中括号中的数字为具体的索引,通过 e.target.dataset.idx 获得。
注意 temp 需要用中括号括起来,这一点很重要,否则不生效。
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/collection/miniprogram/issue/2019-10-12/251.html