1. 程式人生 > >Vue資料雙向繫結原理

Vue資料雙向繫結原理

先看效果圖

//程式碼:
<div id="app">
    <input v-model="name" type="text">
    <h1>{{name}}</h1>
</div>
<script src="./js/observer.js"></script>
<script src="./js/watcher.js"></script>
<script src="./js/compile.js"></script>
<script src="./js/index.js"></script>
<script>
const vm = new Mvue({
    el: "#app",
    data: {
        name: "我是摩登"
    }
});
</script>

在說到資料的雙線繫結前先熟悉下MVVM

什麼是MVVM

MVVM 是 Model-View-ViewModel 的縮寫。mvvm 是一種設計思想。Model 層代表資料模型,也可以在 Model 中定義資料修改和操作的業務邏輯;View 代表 UI 元件,它負責將資料模型轉化成 UI 展現出來,ViewModel 是一個同步 View 和 Model 的物件。

在 MVVM 架構下,View 和 Model 之間並沒有直接的聯絡,而是通過 ViewModel 進行互動,Model 和 ViewModel 之間的互動是雙向的, 因此 View 資料的變化會同步到 Model 中,而 Model 資料的變化也會立即反應到 View 上。

ViewModel 通過雙向資料繫結把 View 層和 Model 層連線了起來,而 View 和 Model 之間的同步工作完全是自動的,無需人為干涉,因此開發者只需關注業務邏輯,不需要手動操作 DOM, 不需要關注資料狀態的同步問題,複雜的資料狀態維護完全由 MVVM 來統一管理。

分析

我們都知道MVVM模式在於資料和檢視層的同步,也就是說當檢視層發生變化時資料也將發生變化.當資料發生變化時檢視也會發生改變

檢視成發生變化時我們可以通過事件監聽即可

資料發生改變通知檢視成方法

正題來了

當我們資料方式改變時我們可以通過 Object.defineProperty 自動觸發set函式從而能夠通知我們跟新檢視.

資料雙向繫結的原理

結合上面的分析我們可以得出Vue資料雙向繫結是通過資料劫持結合* 釋出訂閱者模式 類實現的,我們也知道 資料劫持 * 是通過Object.defineProperty 方法,當我們知道這些後我們就需要一個監聽器 Observer 來監聽屬性的變化,得知屬性的變化後我們就需要一個Watcher 訂閱者來更新檢視,然後我們還需要一個compile 指令解析器,原來解析我們的節點元素的* 指令 * 和 * 初始化檢視 *

Observer 監聽器:用來監聽屬性的變化通知訂閱者
Watcher 訂閱者:收到屬性的變化,然後更新檢視
Compile 解析器:解析指令,初始化模版,繫結訂閱者