最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue2中無法檢測到數(shù)組變動的原因及解決

 更新時間:2021年06月17日 08:36:10   作者:我是樊少  
由于某些限制,vue2不能檢測到某些情況下數(shù)組的變動,本文就將具體講解這兩種限制的解決思路

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

  • 當(dāng)利用索引直接設(shè)置一個數(shù)組項時,例如:vm.items[indexOfItem] = newValue
  • 當(dāng)修改數(shù)組的長度時,例如:vm.items.length = newLength
var vm = new Vue({
  data: {
    items: ['a', 'b', 'c']
  }
})
vm.items[1] = 'x' // 不是響應(yīng)性的
vm.items.length = 2 // 不是響應(yīng)性的

解決方法

手動添加監(jiān)聽
// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
vm.$set(vm.items, indexOfItem, newValue)
使用數(shù)組的變異方法,因為vue對數(shù)組的變異方法實現(xiàn)了響應(yīng)式
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)

為什么Vue2.0中監(jiān)聽不到兩種數(shù)組的變化?

官方文檔中對于這兩點都是簡要的概括為“由于JavaScript的限制”無法實現(xiàn),而Object.defineProperty是實現(xiàn)檢測數(shù)據(jù)改變的方案,那這個限制是指Object.defineProperty嗎?

其實原因并不是因為Object.defineProperty()存在漏洞,而是出于性能問題的考慮。 Object.defineProperty 在數(shù)組中的表現(xiàn)和在對象中的表現(xiàn)是一致的,數(shù)組的索引就可以看做是對象中的 key 。

  • 通過索引訪問或設(shè)置對應(yīng)元素的值時,可以觸發(fā) getter 和 setter 方法
  • 通過 push 或 unshift 會增加索引,對于新增加的屬性,需要再手動初始化才能被 observe 。
  • 通過 pop 或 shift 刪除元素,會刪除并更新索引,也會觸發(fā) setter 和 getter 方法。

所以, Object.defineProperty 是有監(jiān)控數(shù)組下標(biāo)變化的能力的,只是vue2.x放棄了這個特性。

源碼分析

Object.property是可以檢測到通過索引改變數(shù)組的操作的,而Vue沒有實現(xiàn)。那我們看看源碼:

Vue3.0

Vue3.0中則用proxy代替了Object.defineProperty()解決了其存在的問題

以上就是Vue2中無法檢測到數(shù)組變動的原因及解決的詳細內(nèi)容,更多關(guān)于Vue2 數(shù)組變動的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue實現(xiàn)一個圖片懶加載插件

    Vue實現(xiàn)一個圖片懶加載插件

    這篇文章主要給大家介紹了關(guān)于利用Vue實現(xiàn)一個圖片懶加載的插件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • vue+axios實現(xiàn)登錄攔截的實例代碼

    vue+axios實現(xiàn)登錄攔截的實例代碼

    本篇文章主要介紹了vue+axios實現(xiàn)登錄攔截的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Vue3+TS實現(xiàn)語音播放組件的示例代碼

    Vue3+TS實現(xiàn)語音播放組件的示例代碼

    這篇文章主要介紹了如何利用Vue+TS實現(xiàn)一個簡易的語音播放組件,文中的示例代碼講解詳細,對我們學(xué)習(xí)Vue有一定的幫助,需要的可以參考一下
    2022-03-03
  • axios二次封裝的詳細過程與跨域問題

    axios二次封裝的詳細過程與跨域問題

    通常我們的項目會越做越大,頁面也會越來越多,隨之而來的是接口數(shù)量的增加,api統(tǒng)一管理,不管接口有多少,所有的接口都可以非常清晰,容易維護,下面這篇文章主要給大家介紹了關(guān)于axios二次封裝的詳細過程與跨域問題的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • vue運行環(huán)境搭建全過程

    vue運行環(huán)境搭建全過程

    這篇文章主要介紹了vue運行環(huán)境搭建全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Vue使用虛擬鍵盤及中英文切換功能

    Vue使用虛擬鍵盤及中英文切換功能

    這篇文章主要給大家介紹了關(guān)于Vue使用虛擬鍵盤及中英文切換的相關(guān)資料,有時候在大型觸屏設(shè)備(如雙屏設(shè)備)中往往就沒有鍵盤去操作,所以就需要去建立一個虛擬鍵盤去操作,需要的朋友可以參考下
    2023-06-06
  • 手寫可拖動穿梭框組件CustormTransfer vue實現(xiàn)示例

    手寫可拖動穿梭框組件CustormTransfer vue實現(xiàn)示例

    這篇文章主要為大家介紹了手寫可拖動穿梭框組件CustormTransfer vue實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • vue中el-tree?橫向滾動條的實現(xiàn)

    vue中el-tree?橫向滾動條的實現(xiàn)

    本文詳細介紹了在Vue框架中使用el-tree組件創(chuàng)建橫向滾動條的方法,通過代碼示例和步驟說明,幫助開發(fā)者理解和實現(xiàn)橫向滾動功能,感興趣的可以了解一下
    2024-09-09
  • vue里的axios如何獲取本地json數(shù)據(jù)

    vue里的axios如何獲取本地json數(shù)據(jù)

    這篇文章主要介紹了vue里的axios如何獲取本地json數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue 過渡(動畫)transition組件案例詳解

    Vue 過渡(動畫)transition組件案例詳解

    這篇文章主要介紹了Vue 過渡(動畫)transition組件案例詳解,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2017-01-01

最新評論

呼图壁县| 大英县| 浏阳市| 桂平市| 时尚| 娄底市| 宣威市| 祁门县| 隆子县| 姜堰市| 南乐县| 兴安县| 玛多县| 景洪市| 临武县| 大悟县| 涡阳县| 盘山县| 邯郸县| 米林县| 丰顺县| 灵宝市| 馆陶县| 平利县| 江孜县| 巴东县| 沛县| 奎屯市| 钟山县| 朝阳县| 岚皋县| 宜阳县| 乌兰县| 九江市| 临潭县| 合山市| 康保县| 长乐市| 乐业县| 怀来县| 磐安县|