<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Vue不能觀察到數組length的變化

        來源:懂視網 責編:小采 時間:2020-11-27 22:13:09
        文檔

        Vue不能觀察到數組length的變化

        Vue不能觀察到數組length的變化:由于 JavaScript 的限制,Vue 不能檢測以下變動的數組: 當你利用索引直接設置一個項時,例如:vm.items[indexOfItem] = newValue 當你修改數組的長度時,例如:vm.items.length = newLength 因為vue的響應式是通過 Object.defineP
        推薦度:
        導讀Vue不能觀察到數組length的變化:由于 JavaScript 的限制,Vue 不能檢測以下變動的數組: 當你利用索引直接設置一個項時,例如:vm.items[indexOfItem] = newValue 當你修改數組的長度時,例如:vm.items.length = newLength 因為vue的響應式是通過 Object.defineP

        由于 JavaScript 的限制,Vue 不能檢測以下變動的數組: 當你利用索引直接設置一個項時,例如:vm.items[indexOfItem] = newValue 當你修改數組的長度時,例如:vm.items.length = newLength

        因為vue的響應式是通過 Object.defineProperty 來實現的,但是數組的length屬性是不能添加getter和setter,所有無法通過觀察length來判斷。

        為什么Vue不能觀察到數組length的變化

        如下代碼,雖然看起來數組的length是10,但是for in的時候只能遍歷出0, 1, 2,導致了只有前三個索引被加上了getter 和setter

        var a = [0, 1, 2]
        a.length = 10
        // 只是顯示的給length賦值,索引3-9的對應的value也會賦值undefined
        // 但是索引3-9的key都是沒有值的
        // 我們可以用for-in打印,只會打印0,1,2
        for (var key in a) {
         console.log(key) // 0,1,2
        }

        那么vue提供了一些解決方法

        使用內置的Vue.$set

        讓數組顯式的進行某個索引的觀察 Vue.set(array, indexOfItem, newValue)

        實際上是調用了

        Object.defineProperty(array, indexOfItem, {
         enumerable: true,
         configurable: true,
         get() { },
         set(newVal) { }
        })

        這樣可以手動指定需要觀察的key,那么就可以達到預期的效果。

        重寫了 push, pop, shift, unshift, splice, sort, reverse方法

        Vue源碼

        const arrayProto = Array.prototype
        export const arrayMethods = Object.create(arrayProto)
        
        /**
         * Intercept mutating methods and emit events
         */
        ;[
         'push',
         'pop',
         'shift',
         'unshift',
         'splice',
         'sort',
         'reverse'
        ]
        .forEach(function (method) {
         // cache original method
         const original = arrayProto[method]
         def(arrayMethods, method, function mutator (...args) {
         const result = original.apply(this, args)
         const ob = this.__ob__
         let inserted
         switch (method) {
         case 'push':
         case 'unshift':
         inserted = args
         break
         case 'splice':
         inserted = args.slice(2)
         break
         }
         if (inserted) ob.observeArray(inserted)
         // notify change
         ob.dep.notify()
         return result
         })
        })

        這些是在Array.__proto__上 進行了方法重寫或者添加

        并且對添加屬性的方法如 push,unshift,splice 所添加進來的新屬性進行手動觀察,源碼為

        if (inserted) ob.observeArray(inserted)

        對以上方法進行了手動的進行消息觸發

        ob.dep.notify()

        結論

        vue對數組的length直接改變無法直接進行觀察,提供了vue.$set 進行顯式觀察,并且重寫了 push, pop, shift, unshift, splice, sort, reverse方法來進行隱式觀察。

        以上所述是小編給大家介紹的Vue不能觀察到數組length的變化,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Vue不能觀察到數組length的變化

        Vue不能觀察到數組length的變化:由于 JavaScript 的限制,Vue 不能檢測以下變動的數組: 當你利用索引直接設置一個項時,例如:vm.items[indexOfItem] = newValue 當你修改數組的長度時,例如:vm.items.length = newLength 因為vue的響應式是通過 Object.defineP
        推薦度:
        標簽: 不能 VUE 觀察
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲高清日韩精品第一区| 亚洲日韩精品无码专区网址 | 免费观看日本污污ww网站一区| 亚洲人成免费网站| 中文毛片无遮挡高潮免费| 亚洲国产成人久久99精品| 51视频精品全部免费最新| 图图资源网亚洲综合网站| 久久这里只精品国产免费10| 亚洲精品无码不卡| 永久免费视频网站在线观看| 亚洲成人免费网址| 搡女人真爽免费视频大全| 亚洲sm另类一区二区三区| 四虎永久成人免费| 一级毛片免费不卡直观看| 亚洲一区精品无码| 免费人妻无码不卡中文字幕系| 亚洲女人18毛片水真多| 在线免费视频一区| 免费人成再在线观看网站| 亚洲一级黄色视频| 国产精品免费观看调教网| 亚洲另类小说图片| 国产免费变态视频网址网站| 中文字幕在线免费播放| 久久丫精品国产亚洲av不卡 | 亚洲白色白色在线播放| 免费羞羞视频网站| 国产精品无码永久免费888| 亚洲国产精品自在在线观看| 毛片免费在线视频| 一级特黄a免费大片| 亚洲综合自拍成人| 国产一级高清视频免费看| 中文字幕成人免费高清在线 | 亚洲欧洲精品成人久久曰| 亚洲国产精品成人AV无码久久综合影院| 国产一区二区三区免费观看在线| 亚洲成人网在线观看| 免费萌白酱国产一区二区|