先看一下官方說明:受 ES5 的限制,Vue.js 不能檢測到對(duì)象屬性的添加或刪除。因?yàn)?Vue.js 在初始化實(shí)例時(shí)將屬性轉(zhuǎn)為 getter/setter,所以屬性必須在 data 對(duì)象上才能讓 Vue.js 轉(zhuǎn)換它,才能讓它是響應(yīng)的。
項(xiàng)目中,需要更新服務(wù)器數(shù)據(jù)增加一些屬性(比如:按鈕狀態(tài)、按鈕文案),用來控制一個(gè)服的角色,增加后點(diǎn)擊視圖上一點(diǎn)反應(yīng)都沒有,但是用console.log
打印出來發(fā)現(xiàn)值的確的有變化的。
也就是說,數(shù)據(jù)的變化不能觸發(fā)視圖更新。原因就是如上面所說,因?yàn)檫@個(gè)屬性是我后來添加的,不能被 Vuejs 檢測到。這時(shí)候需要使用$set(key, value)這個(gè)API。
假如你的數(shù)據(jù)是這樣:
data() {
return {
testItems: [
{
zServer: "公測001區(qū)公測001區(qū)"
}
]
}
}
你需要在一些操作后為testItems里面的每個(gè)對(duì)象增加一個(gè)show屬性,則需要這樣寫:
for( let i = 0 , len = this.testItem.length ; i < len; i++ ) {
let obj = this.testItem[i];
obj.ACTOR_NAME = "五殺~";
obj.ACTOR_BTN = "取消添加";
this.$set( this.testItem, i, obj );
}