关于这件事我遇到过两次。
先说第一次的解决方法。
第一次是我要根据后台传递的状态值来动态的改变用户是收藏了故事,还是没收藏故事的样式。
所以这个解决方法的前提条件是,后台有给你传递状态值。
直接代码来看。
<i bindtap="change" data-id="{{item.id}}"
class="fa fa-{{item.status==1?'star':'star-o'}} anniu" data-status="{{item.status}}" style="color:{{color}};"></i>
由图,用三目运算符判断状态,动态的添加属性样式。
再说第二次的解决方法。第二次没有那么好运了,后台没有给我传任何的状态。
扫描二维码关注公众号,回复:
3319809 查看本文章
那要怎么办?自己添加状态呗。
首先,把需要的状态保存起来。我是要判断一道题做过了没有。
init: function (){
var that=this;
var meng;
var questlist = wx.getStorageSync('questlist');
var answerlist = wx.getStorageSync('answerlist');
console.log("开始打印长度");
var thelength=questlist.length;
console.log(thelength)
var arr = [];
for (let i = 0; i < thelength; i++) {
arr[i] = 0;
}
console.log(arr)
console.log("开始打印");
for (var index in answerlist){
console.log(index);
for (var i = 0, len = questlist.length; i < len; i++) {
meng=questlist[i].id;
console.log(questlist[i].id);
if(meng==index) {
// that.setData({
// color:"black"
// })
arr[i]=1;
}
}
console.log(index);
}
console.log(arr)
return arr;
},
首先,通过缓存获取到题目列表和答案对象。
如图中代码所示,先用for循环创建一个有初始值的数组。
然后嵌套遍历问题列表和答案对象,找出对应的问题id和答案属性id一样的时候,修改初始数组的值为1,原本是0。
这就做到了保存问题是否已经答过了的状态。
之后,就到了最重要的一步了,给后台传递的对象数组添加属性。
talk is cheap, show you the code!
wx.request({
url: getApp().globalData.website + 'choose/',
method: 'GET',
data: {
openId: wx.getStorageSync('openId'),
id: that.data.id
},
header: {
'Accept': 'application/json'
},
success: function (res) {
let { code, list, isAlready } = res.data
console.log("list")
console.log(list)
list=JSON.parse(list);
for(var i = 0, len = list.length; i < len; i++){
for(var j = 0, leng = arr.length; j < leng; j++){
if(i==j){
// console.log(list[5])
list[i].status=arr[j];
}
}
}
console.log(list)
if (code == 0) {
that.setData({
list: list,
isAlready: isAlready
})
wx.setStorageSync("questlist", that.data.list)
} else {
that.openAlert()
}
},
fail: function () {
that.openAlert()
}
})
用一个嵌套循环,把状态值传递到新创建的属性。
关于对象怎么创建新属性,请看我的另外一篇博客。
https://mp.csdn.net/postedit/82353958
好了这就把状态添加到后台传递的对象数组里面了。
<view class="placeholder p-right" bindtap='toResult' style="color:{{item.status==1?'black':'white'}};" data-number='{{index}}'>{{index+1}}</view>
</block>
再用个三目表达式,完美,达到目的,看效果图。答过得题的颜色变为了黑色。