亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Vue 中的 set 和 $set 的原理是什么,是怎么實現的?

Vue 中的 set 和 $set 的原理是什么,是怎么實現的?

ibeautiful 2018-08-26 11:22:53
原理,實現原理,實現原理,實現原理,實現
查看完整描述

1 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

如下圖所示,先進行一個判斷,判斷target不是undefined、null、string、number、symbol、boolean類型的數據。

1.如果target是一個數組,那么根據key值及數組長度更改數組的長度(取其中較大者),然后直接使用splice函數修改數組,雖然vue沒有監聽數組變化,但是監聽了數組的push,pop,shift,unshift,splice,sort,reverse函數,所以使用splice也可以達到更新dom的目的

2.如果target是一個對象,且key是對象已存在的私有屬性,那么直接賦值就可以了,因為這個key必然是被監聽過的

3.如果這個key目前沒有存在于對象中,那么會進行賦值并監聽。這里省略了ob的判斷,那么ob是什么呢,vue中初始化的數據(比如data中的數據)在頁面初始化的時候都會被監聽,而被監聽的屬性都會被綁定__ob__屬性,這里就是判斷這個數據有沒有被監聽的。如果這個數據沒有被監聽,那么就默認你不想監聽這個數據,所以直接賦值并返回

https://img1.sycdn.imooc.com//5b836eb20001109808000533.jpg

最后,$set就是set

Vue.prototype.$set = set;


查看完整回答
反對 回復 2018-08-27
  • 1 回答
  • 0 關注
  • 2400 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號