公主的腿间舌奴们np肉_国产在热线精品视频99公交_公主车上荫蒂添的好舒服_公侵犯人妻中文字慕一区二区_公么大龟弄得我好舒服秀_公交车+多人+高cH文章推荐_日本熟妇另类视频在线播放

vue 數(shù)據(jù)雙向綁定原理

2021-10-11    前端達(dá)人





首先我們?yōu)槊總€(gè)vue屬性用Object.defineProperty()實(shí)現(xiàn)數(shù)據(jù)劫持,為每個(gè)屬性分配一個(gè)訂閱者集合的管理數(shù)組dep;然后在編譯的時(shí)候在該屬性的數(shù)組dep中添加訂閱者,v-model會(huì)添加一個(gè)訂閱者,{{}}也會(huì),v-bind也會(huì),只要用到該屬性的指令理論上都會(huì),接著為input會(huì)添加監(jiān)聽事件,修改值就會(huì)為該屬性賦值,觸發(fā)該屬性的set方法,在set方法內(nèi)通知訂閱者數(shù)組dep,訂閱者數(shù)組循環(huán)調(diào)用各訂閱者的update方法更新視圖。



一小段手寫實(shí)現(xiàn)代碼

僅供參考

class Vue {
constructor(option){
this.$data = option.data
Observe(this.$data)
Object.keys(this.$data).forEach((key)=>{
Object.defineProperty(this,key,{
enumerble: true,
configurable: true,
get(){
return this.$data[key]
},
set(newVal){
this.$data[key] = newVal
},
})
})
}
}

function Observe (obj){
if(!obj || typeof obj !== 'object') return
Object.keys(obj).forEach((key)=>{
let value = obj[key]
Observe(value)
Object.defineProperty(obj,key,{
enumerble: true,
configurable: true,
get(){
console.log('有人獲取了 ${key} 的值')
return value
},
set(newVal){
value = newVal
Observe(value)
},
})
})
}

1

藍(lán)藍(lán)設(shè)計(jì)建立了UI設(shè)計(jì)分享群,每天會(huì)分享國(guó)內(nèi)外的一些優(yōu)秀設(shè)計(jì),如果有興趣的話,可以進(jìn)入一起成長(zhǎng)學(xué)習(xí),請(qǐng)掃碼藍(lán)小助,報(bào)下信息,藍(lán)小助會(huì)請(qǐng)您入群。歡迎您加入噢~~希望得到建議咨詢、商務(wù)合作,也請(qǐng)與我們聯(lián)系。

藍(lán)藍(lán)設(shè)計(jì)tweetduck.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)

日歷

鏈接

個(gè)人資料

存檔

连山| 汝城县| 巫山县| 津南区| 宜丰县| 临城县| 威远县| 尉犁县| 金平| 松溪县| 余江县| 乐业县| 石柱| 中西区| 化州市| 巴青县| 老河口市| 新野县| 繁昌县| 延吉市| 阿鲁科尔沁旗| 邓州市| 焦作市| 营山县| 张掖市| 米易县| 利川市| 彝良县| 莒南县| 黔江区| 淳安县| 双鸭山市| 通化市| 屯门区| 永仁县| 通化市| 垦利县| 都昌县| 永平县| 敦化市| 法库县|