根據(jù)vue官方文檔,直接修改數(shù)組的值,將無法更改view層,可以使用$set來實現(xiàn)。那么數(shù)組內(nèi)的對象如何修改呢,是使用$set來修改,還是直接使用數(shù)組下標的方式修改。
為什么我現(xiàn)在直接使用數(shù)組下標的方式修改也能觸發(fā)view更新呢?
vue是沒有監(jiān)聽下標賦值的操作也無法監(jiān)聽
下面這種是無法監(jiān)聽的
var arr = ["a","b"];
arr[1] = "bbbb";
vue只監(jiān)聽了'push','pop','shift','unshift','splice','sort','reverse'等直接改變原數(shù)組的方法
而$set,內(nèi)部還是splice方法
function set(target, key, val) {
if (Array.isArray(target) && typeof key === 'number') {
target.length = Math.max(target.length, key);
target.splice(key, 1, val);
return val
}
//其他操作
...
}
但是如果你的結構下面:
var arr = ["a",{text:"b"}];
arr[1].text = "bbbbb";
因為對數(shù)據(jù)進行了遞歸 對象的賦值是可以直接監(jiān)聽到的
但是下面又不行了
var arr = ["a",{text:"b"}];
arr[1] = {text:"bbbbb"};
總結來說不要數(shù)組下標直接賦值
var arr = ["a",{text:"b"}];
this.arr[1] = {text:"bbbbb"};//除了這種以下都可以
this.arr[1].text = "bbbbb";//利用對象的監(jiān)聽
this.arr = ["a",{text:"bbbbb"}];//同上
this.arr.splice(1, 1, {text:"bbbbb"});//數(shù)組的監(jiān)聽
this.$set(this.arr,1,{text:"bbbbb"});//同上文檔中提到了這幾點:
由于 JavaScript 的限制,Vue 不能檢測以下變動的數(shù)組:
- 當你利用索引直接設置一個項時,例如:vm.items[indexOfItem] = newValue
- 當你修改數(shù)組的長度時,例如:vm.items.length = newLength
其中你的疑問是第一點吧?文檔的意思是比如現(xiàn)在有一個數(shù)組arr,內(nèi)容是[1,2,3],然后你想要加多一項,然后arr[3] = 4,這個時候Vue是檢測不到的,而且arr[0] = 666也不行。數(shù)組內(nèi)的對象的內(nèi)容只要一開始添加了,就可以直接arr[index].key = val這樣改,如果是一開始沒有添加,那就要用$set添加。至于你說的可以監(jiān)聽到,可以發(fā)一個demo看一下
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。