小程序之this.setData动态修改数据某个下标的值

724 阅读1分钟

1.基本使用

data:{
demo:1
}
比如上面这个data里面的demo,我们需要修改它的值。通常来说有两种方法:
1.直接this.data.demo 用 ‘=’来进行赋值,这是可行的,不过因为data里的数据一般都是跟页面进行绑定了的,我们直接‘=’赋值容易发生数据发生页面没有变化的情况发生。所以一般我们都是用第二种方法
2.this.setData({
demo:2
})
这种方法可以更新数据的时候同时更新渲染界面

2.动态修改

data: {
demo:2,
params: [{ cut: true }, { cut: true },{ cut: true }]
}
这次我们想要修改isDemo里面的特定下标的值,并且这个值是动态的,我们该怎么写:
直接假设一个wx:for循环的情况吧

 <view class='main-tow' wx:for='{{params}}' wx:for-index="bindex">
  <view class='main-head' data-bindex='{{bindex}}' bindtap='onHidden'>
    <text>{{item.cut}}</text>
  </view>
  </view>

上面这个wxml里面,首先,我们通过wx:for-index进行key键的绑定,然后再需要绑定的view里面进行赋值data-bindex='{{bindex}}',这样我们就可以在js里面通过e.currentTarget.dataset.bindex,得到你渲染出来后选中点击view的下标。
这是你继续进行this.setData会得到一个报错Only number 0-9 could inside []:。 解决方法:
let index = e.currentTarget.dataset.bindex;
//根据点击不同的view获取对应的id值
let arr = this.data.params;
//重点在这里,组合出一个字符串
let arrCut = 'params[' + index + '].cut'
//用中括号把str括起来即可
this.setData({
[arrCut]: false
})

具体原理还不清楚,需要研究一下,这次就直接给出解决方法