第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

vue 數(shù)組對象的修改

vue 數(shù)組對象的修改

富國滬深 2019-03-06 21:23:18
根據(jù)vue官方文檔,直接修改數(shù)組的值,將無法更改view層,可以使用$set來實現(xiàn)。那么數(shù)組內(nèi)的對象如何修改呢,是使用$set來修改,還是直接使用數(shù)組下標(biāo)的方式修改。為什么我現(xiàn)在直接使用數(shù)組下標(biāo)的方式修改也能觸發(fā)view更新呢?
查看完整描述

2 回答

?
30秒到達(dá)戰(zhàn)場

TA貢獻(xiàn)1828條經(jīng)驗 獲得超6個贊

文檔中提到了這幾點:

由于 JavaScript 的限制,Vue 不能檢測以下變動的數(shù)組:

  1. 當(dāng)你利用索引直接設(shè)置一個項時,例如:vm.items[indexOfItem] = newValue

  2. 當(dāng)你修改數(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看一下


查看完整回答
反對 回復(fù) 2019-03-14
?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗 獲得超8個贊

vue是沒有監(jiān)聽下標(biāo)賦值的操作也無法監(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

    }

    //其他操作  

    ...  

}

但是如果你的結(jié)構(gòu)下面:


var arr = ["a",{text:"b"}];

arr[1].text = "bbbbb";

因為對數(shù)據(jù)進(jìn)行了遞歸 對象的賦值是可以直接監(jiān)聽到的

但是下面又不行了


var arr = ["a",{text:"b"}];

arr[1] = {text:"bbbbb"};

總結(jié)來說不要數(shù)組下標(biāo)直接賦值


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"});//同上


查看完整回答
反對 回復(fù) 2019-03-14
  • 2 回答
  • 0 關(guān)注
  • 493 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號