setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步).setData中可以传入的参数Object 以 key: value 的形式表示,将 this.data 中的 key 对应的值改变成 value。其中 key 可以以数据路径的形式给出,支持改变数组中的某一项或对象的某个属性,有时我们需要在使用变量表示key,这时应该如何操作呢.
问题描述:
例一:
binddata: function (e) {
var idNum = e.target.id;
this.setData({ idNum: e.detail.value });
}
idNum传过去,直接是data中多了一个'idNum'的数据,不是动态的id数值.
例二:
changeIntro:function (event) {
let videoArrayIndex = event.target.dataset.index;
this.setData({
'videoArray[videoArrayIndex].introState' : true
})
}
无法改变introState的值,因为videoArrayIndex没有被解析为序列号.
解决办法:
一. 用一个空对象暂存
var data = {}
data[key] = value // key 可以是任何字符串
this.setData(data)
使用一个中间对象暂存解决上述例二
changeIntro:function (event) {
let videoArrayIndex = event.target.dataset.index;
let dataIntro = {};
let keyIntro = 'videoArray['+videoArrayIndex+'].introState';
dataIntro[keyIntro] = true; // key 可以是任何字符串
this.setData(dataIntro)
}
二. 使用es6 新特性
this.setData({
[key]: value
})
使用
changeIntro:function (event) {
let videoArrayIndex = event.target.dataset.index;
this.setData({
['videoArray['+videoArrayIndex+'].introState'] : true
})
}
更多分享请移步我的个人博客: https://tianxintiandisheng.github.io/
其实还可以:
changeIntro(event) {
let videoArrayIndex = event.target.dataset.index;
let introState = `videoArray[${videoArrayIndex}].introState`;
this
.setData({
[introState] :
true,
})
}
嗯,用了es6的字符串扩展语法。不过es6语法会在某些iPhone6上报错,还是谨慎使用。
是低版本的ios导致?
不是版本问题,在7和6p中出现报错较为频繁,代码直接无法执行.
那怎么取值呢? this.data.[key] 这样吗?