上一篇
Javascript 获取链接的参数值
微信小程序有个 setData 的函数,其数据赋值功能,对此熟悉得再不能熟悉了。你以为了解了它的全部,不,你根本对它一知半解。
在制作选择时间范围功能时,startTime 与 endTime 初始化默认数据,其数据是一样的。本着能重复的代码只写一篇的原则,只声明一个 object 对象,赋值给两者,由此揭开 setData 不为人知的一面。
JSdata:{
filter: {
startTime: {show: 0, year: '',month: '',day: '',value: ''},
endTime: {show: 0, year: '',month: '',day: '',value: ''},
},
},
init: function () { //初始化数据
let date = new Date();
let object = {
show: 0,
year: date.getFullYear(),
month: date.getMonth() + 1,
day: date.getDate(),
value: ''
}
this.setData({
'filter.startTime': object,
'filter.endTime': object ,
});
}
在选好时间段后,分别对filter.startTime.year与filter.endTime.year 数据进行赋值。最终先赋值的filter.startTime.year 被后来的filter.endTime.year覆盖了。
JS...
this.setData({
'filter.startTime.year': 2019,
'filter.endTime.year': 2020
});
console.log('year',this.data.filter.startTime.year,this.data.filter.endTime.year);
//输出结果:year,2020,2020
...
出现这种情况,开始还怀疑赋值时触发了别的事件,结果注释所有代码,问题依旧。
问题的产生只因为只声明一个 object 对象对两者同时赋值,在赋值 filter.startTime 与 filter.endTime下一级的值时,它们父节点是共用一个地址IP,引发前者被后者覆盖的现象。
解决的方法同样很简单,即然是共用一个地址IP,那声明多一个object1对象,让内存开辟新的地址来存储数据。
JS...
this.setData({
'filter.startTime': object,
'filter.endTime': object1 ,
});
...
最新评论Latest comments