如果在實例創(chuàng)建之后添加新的屬性到實例上阻桅,它不會觸發(fā)視圖更新。
業(yè)務介紹:模擬后臺數(shù)據(jù)向DOM樹上遍歷數(shù)據(jù)坊饶,再向數(shù)據(jù)里添加狀態(tài)屬性灾搏,根據(jù)狀態(tài)改變顯示圖片挫望,默認nochecked.png,點擊時改變狀態(tài)狂窑。顯示checked.png
DOM樹
<div class="cartContent" :class="{'bg' : status == 2}" v-for="(val,key) in imgListData" :id="key">
<div class="choose">
![](../assets/img/radio-checked.png)
![](../assets/img/radio-nochecked.png)
</div>
.........
</div>
模擬數(shù)據(jù)
data(){
return{
responseData:[
{'id':'1','name':'女裝','price':115,'num':1,'pic':'../static/img/1.jpg'},
{'id':'2','name':'男裝','price':110,'num':1,'pic':'../static/img/2.jpg'},
{'id':'3','name':'童裝','price':118,'num':2,'pic':'../static/img/3.jpg'}
],
imgListData:[]
}
},
向原數(shù)據(jù)添加新屬性status
created() {
this.allDataList()
},
methods:{
allDataList(){
for(let val of this.responseData){
// val.status=false;//寫這個有問題
this.$set(val,'status',false)//此處為重點
this.imgListData.push(val)
}
console.log(this.imgListData)
}
點擊事件(根據(jù)索引改變當前屬性的狀態(tài))
choose(index){
if(this.imgListData[index].status){
this.imgListData[index].status=false;
}else{
this.imgListData[index].status=true
}
},
輸出發(fā)現(xiàn)有status屬性媳板,狀態(tài)也由false改為了true,但是就是樣式要刷新一下才能顯示泉哈。把里面的屬性仔細看一遍原來status沒有get/set方法蛉幸。錯誤展示:
把 val.status=false;
改為this.$set(val,'status',false)
問題就解決了。