mvvm

模型,視圖,視圖模型vue

在vue中:Model:指的是js中的數據,如對象,數組等等。
View:指的是頁面視圖
viewModel:指的是vue實例化對象數組

主流框架實現雙向綁定(響應式)的作法:
1. 髒值檢查:angular.js 是經過髒值檢測的方式比對數據是否有變動,來決定是否更新視圖,最簡單的方式就是經過 setInterval() 定時輪詢檢測數據變更,固然Google不會這麼low,angular只有在指定的事件觸發時進入髒值檢測,大體以下: DOM事件,譬如用戶輸入文本,點擊按鈕等。( ng-click ) XHR響應事件 ( $http ) 瀏覽器Location變動事件 ( $location ) Timer事件( $timeout , $interval ) 執行 $digest() 或 $apply()在 Angular 中組件是以樹的形式組織起來的,相應地,檢測器也是一棵樹的形狀。當一個異步事件發生時,髒檢查會從根組件開始,自上而下對樹上的全部子組件進行檢查,這種檢查方式的性能存在很大問題。瀏覽器

2.觀察者-訂閱者(數據劫持):
Observer 數據監聽器,把一個普通的 JavaScript 對象傳給 Vue 實例的 data 選項,Vue 將遍歷此對象全部的屬性,並使用Object.defineProperty()方法把這些屬性所有轉成setter、getter方法。當data中的某個屬性被訪問時,則會調用getter方法,當data中的屬性被改變時,則會調用setter方法。

Compile指令解析器,它的做用對每一個元素節點的指令進行解析,替換模板數據,並綁定對應的更新函數,初始化相應的訂閱。

Watcher 訂閱者,做爲鏈接 Observer 和 Compile 的橋樑,可以訂閱並收到每一個屬性變更的通知,執行指令綁定的相應回調函數。Dep 消息訂閱器,內部維護了一個數組,用來收集訂閱者(Watcher),數據變更觸發notify 函數,再調用訂閱者的 update 方法。app

相關文章
相關標籤/搜索