vue學習經驗總結(雙向資料繫結底層原理)

2021-10-09 20:16:46 字數 757 閱讀 5648

雙向繫結原理

vue的雙向繫結是由資料劫持結合發布者-訂閱者模式實現的,那麼什麼是資料劫持?

vue是如何進行資料劫持的?說白了就是通過object.defineproperty()來劫持物件屬性的setter和getter操作,在資料變動時做你想要做的事情

我們已經知道實現資料的雙向繫結,首先要對資料進行劫持監聽,所以我們需要設定乙個***observer,用來監聽所有屬性。如果屬性發生變化了,就需要告訴訂閱者watcher看是否需要更新。因為訂閱者是有很多個,所以我們需要有乙個訊息訂閱器dep來專門收集這些訂閱者,然後在***observer和訂閱者watcher之間進行統一管理的。接著,我們還需要有乙個指令解析器compile,對每個節點元素進行掃瞄和解析,將相關指令(如v-model,v-on)對應初始化成乙個訂閱者watcher,並替換模板資料或者繫結相應的函式,此時當訂閱者watcher接收到相應屬性的變化,就會執行對應的更新函式,從而更新檢視。因此接下去我們執行以下3個步驟,實現資料的雙向繫結:

1.實現乙個***observer,用來劫持並監聽所有屬性,如果有變動的,就通知訂閱者。

2.實現乙個訂閱者watcher,每乙個watcher都繫結乙個更新函式,watcher可以收到屬性的變化通知並執行相應的函式,從而更新檢視。

3.實現乙個解析器compile,可以掃瞄和解析每個節點的相關指令(v-model,v-on等指令),如果節點存在v-model,v-on等指令,則解析器compile初始化這類節點的模板資料,使之可以顯示在檢視上,然後初始化相應的訂閱者(watcher)。

Vue經驗總結

題記 前段時間時隔8個月重新拾起了vue,vue的太 yi 好 jing 用 wang 了 wan 以前用慣了react的dva然後突然切換到vue的vuex真的有點不習慣。這個是vuex中的大哥大,什麼都歸它管 state mutations getter action module 你可以把它理...

vue面試經驗總結

props e mi t自定義 事件ev ent.emit 自定義事件event.emit自定 義事件e vent on 兄弟傳值 注意銷毀 event.off 生命週期 建立或update從外到內 渲染從內到外 vue 高階特性 hello p 子 type text value msg inpu...

vue雙向資料繫結

話術 vue中v model可以實現雙向繫結,其核心思想通過object.definepropery來對vue的資料進行資料劫持。主要分為四部分 第一部分observer主要是負責對vue資料進行資料劫持,使其資料擁有get和set方法 第二部分指令解析器負責繫結資料和指令,繫結試圖更新方法 第三部...