2 回答

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊
需要注意的是,Vue之所以能夠監(jiān)聽(tīng)Model狀態(tài)的變化,是因?yàn)镴avaScript語(yǔ)言本身提供了Proxy或者Object.observe()機(jī)制來(lái)監(jiān)聽(tīng)對(duì)象狀態(tài)的變化。但是,對(duì)于數(shù)組元素的賦值,卻沒(méi)有辦法直接監(jiān)聽(tīng),因此,如果我們直接對(duì)數(shù)組元素賦值:
vm.todos[0] = {name: 'New name',description: 'New description'};
會(huì)導(dǎo)致Vue無(wú)法更新View。
正確的方法是不要對(duì)數(shù)組元素賦值,而是更新:
vm.todos[0].name = 'New name';vm.todos[0].description = 'New description';
或者,通過(guò)splice()方法,刪除某個(gè)元素后,再添加一個(gè)元素,達(dá)到“賦值”的效果:
var index = 0;var newElement = {...};vm.todos.splice(index, 1, newElement);
Vue可以監(jiān)聽(tīng)數(shù)組的splice、push、unshift等方法調(diào)用,所以,上述代碼可以正確更新View。
添加回答
舉報(bào)