<strike id="cy2gs"><menu id="cy2gs"></menu></strike>
  • <del id="cy2gs"><dfn id="cy2gs"></dfn></del>
  • vue 數據雙向綁定原理

    2021-10-11    前端達人





    首先我們為每個vue屬性用Object.defineProperty()實現數據劫持,為每個屬性分配一個訂閱者集合的管理數組dep;然后在編譯的時候在該屬性的數組dep中添加訂閱者,v-model會添加一個訂閱者,{{}}也會,v-bind也會,只要用到該屬性的指令理論上都會,接著為input會添加監聽事件,修改值就會為該屬性賦值,觸發該屬性的set方法,在set方法內通知訂閱者數組dep,訂閱者數組循環調用各訂閱者的update方法更新視圖。



    一小段手寫實現代碼

    僅供參考

    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

    藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

    藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

    日歷

    鏈接

    個人資料

    藍藍設計的小編 http://m.skdbbs.com

    存檔

    主站蜘蛛池模板: 日本精品自产拍在线观看中文| 精品视频无码一区二区三区 | 久久精品一区二区影院| 国产久热精品无码激情| 亚洲精品尤物yw在线影院| Aⅴ精品无码无卡在线观看| 国产午夜精品免费一区二区三区| 久久国产精品二国产精品| 97精品人妻一区二区三区香蕉| 99久久久精品免费观看国产| 在线精品国产一区二区三区| 久久国产精品一区| 隔壁老王国产在线精品| 久久99精品国产| 成人区人妻精品一区二区不卡视频 | 精品无码国产一区二区三区51安 | 国产精品免费观看视频| 久久福利青草精品资源站免费| 精品无人码麻豆乱码1区2区| 亚洲中文字幕久久精品无码喷水| 国产在线观看一区二区三区精品| 中文字幕精品视频| 久久精品国产精品亚洲精品| 99re6这里有精品热视频| 精品国产精品国产偷麻豆| 日韩精品极品视频在线观看免费 | 精品久久久久国产免费| 国产成人久久精品麻豆一区| 免费欧美精品a在线| 精品久久一区二区| 精品久久香蕉国产线看观看亚洲| 国产亚洲综合成人91精品| 国产精品多人p群无码| 国产精品视频色拍拍| 国产最新进精品视频| 国产精品免费福利久久| 久久亚洲精品中文字幕| 热re99久久精品国99热| 久久亚洲欧美国产精品| 国产精品国产三级国产av品爱网| 2022国产精品自产拍在线观看|