data屬性:a: {},b: [],在created的時候從服務器獲取數據,需要填充到a和b中,因為數據需要過濾所以不能直接賦值,for(let key in response.data.list){ if(response.data.list[key].type == 2){ this.a[key] = response.data.list[key]
}
}修改a的值時,視圖不會刷新??戳宋臋n說是因為a的屬性中沒有key,新增的屬性要$set。但是,對b的操作有兩種結果。這樣操作:for(let key in response.data.list){ if(response.data.list[key].type == 1){ this.b.push(response.data.list[key])
}
}修改b的值,視圖會刷新。如果是這樣:let index = 0;
for(let key in response.data.list){ if(response.data.list[key].type == 1){
this.b[index] = response.data.list[key] index ++
}
}修改b的值,視圖不會刷新。為什么push的時候不需要$set?
1 回答

千巷貓影
TA貢獻1829條經驗 獲得超7個贊
vue數據雙向綁定依賴于Object.defineProperty( ),而這個東西對數組的變動無法檢測,所以你的arr[i]怎么變,對vue來說它不知道,當然視圖也不會跟新;所以你有兩種方法:1、將你篩選的arrry先用一個數組arr保存,然后一次性this.b = arr(引用數居的指針變了,vue會對這個值重新init,視圖會更新);2、this.b[index] = response.data.list[key]換成this.b.push(response.data.list[key])--(vue封裝的方法,就是說data里的每個屬性的prototype上都重寫了這個方法,push操作是會使對應的視圖更新)
添加回答
舉報
0/150
提交
取消