国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

Vue不能觀察到數(shù)組length的變化

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:13:09
文檔

Vue不能觀察到數(shù)組length的變化

Vue不能觀察到數(shù)組length的變化:由于 JavaScript 的限制,Vue 不能檢測以下變動(dòng)的數(shù)組: 當(dāng)你利用索引直接設(shè)置一個(gè)項(xiàng)時(shí),例如:vm.items[indexOfItem] = newValue 當(dāng)你修改數(shù)組的長度時(shí),例如:vm.items.length = newLength 因?yàn)関ue的響應(yīng)式是通過 Object.defineP
推薦度:
導(dǎo)讀Vue不能觀察到數(shù)組length的變化:由于 JavaScript 的限制,Vue 不能檢測以下變動(dòng)的數(shù)組: 當(dāng)你利用索引直接設(shè)置一個(gè)項(xiàng)時(shí),例如:vm.items[indexOfItem] = newValue 當(dāng)你修改數(shù)組的長度時(shí),例如:vm.items.length = newLength 因?yàn)関ue的響應(yīng)式是通過 Object.defineP

由于 JavaScript 的限制,Vue 不能檢測以下變動(dòng)的數(shù)組: 當(dāng)你利用索引直接設(shè)置一個(gè)項(xiàng)時(shí),例如:vm.items[indexOfItem] = newValue 當(dāng)你修改數(shù)組的長度時(shí),例如:vm.items.length = newLength

因?yàn)関ue的響應(yīng)式是通過 Object.defineProperty 來實(shí)現(xiàn)的,但是數(shù)組的length屬性是不能添加getter和setter,所有無法通過觀察length來判斷。

為什么Vue不能觀察到數(shù)組length的變化

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

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

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

使用內(nèi)置的Vue.$set

讓數(shù)組顯式的進(jìn)行某個(gè)索引的觀察 Vue.set(array, indexOfItem, newValue)

實(shí)際上是調(diào)用了

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

這樣可以手動(dòng)指定需要觀察的key,那么就可以達(dá)到預(yù)期的效果。

重寫了 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__上 進(jìn)行了方法重寫或者添加

并且對添加屬性的方法如 push,unshift,splice 所添加進(jìn)來的新屬性進(jìn)行手動(dòng)觀察,源碼為

if (inserted) ob.observeArray(inserted)

對以上方法進(jìn)行了手動(dòng)的進(jìn)行消息觸發(fā)

ob.dep.notify()

結(jié)論

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

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

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Vue不能觀察到數(shù)組length的變化

Vue不能觀察到數(shù)組length的變化:由于 JavaScript 的限制,Vue 不能檢測以下變動(dòng)的數(shù)組: 當(dāng)你利用索引直接設(shè)置一個(gè)項(xiàng)時(shí),例如:vm.items[indexOfItem] = newValue 當(dāng)你修改數(shù)組的長度時(shí),例如:vm.items.length = newLength 因?yàn)関ue的響應(yīng)式是通過 Object.defineP
推薦度:
標(biāo)簽: 不能 VUE 觀察
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲一区二区影院 | 国产三级一区 | 久久久91精品国产一区二区 | 222aaa免费国产在线观看 | 99久久综合国产精品免费 | 国产精选一区二区 | 黄网站免费观看 | 亚洲国产成人久久三区 | 亚洲激情影院 | 亚洲欧美二区三区久本道 | 欧美激情一区二区 | 亚洲第8页| 91精品国产91久久久久久 | 亚洲一区二区三区中文字幕 | 国产不卡网 | 日韩精品一区二区三区国语自制 | 亚洲一区二区三区高清 不卡 | 亚洲精品美女久久久aaa | 91久久综合九色综合欧美98 | 欧美日韩网 | 国产福利一区二区 | 日韩免费视频观看 | 国产视频三区 | 国产偷窥女洗浴在线观看 | 国产一级特黄a大片99 | 亚洲国产欧美自拍 | 国产视频a | 亚洲欧美激情另类 | 一级成人毛片免费观看 | 午夜啪啪网 | 亚洲欧美视频一区 | xx中文字幕乱偷avxx | 日韩区在线 | 日本一区二区三区精品视频 | 婷婷久草 | 热综合一本伊人久久精品 | 欧美一区二区三区在线视频 | 欧美日韩亚洲另类 | 国产午夜小视频 | 欧美日本日韩aⅴ在线视频 欧美日韩91 | 久久久噜噜噜www成人网 |