當前位置:歷史故事大全網 - 歷史上的今天 - Vue學習系列I——MVVM響應系統的基本實現原理

Vue學習系列I——MVVM響應系統的基本實現原理

MVVM是模型-視圖-視圖模型的簡稱。它的模式是MVC->;MVP—& gt;MVVM的進化版本。

Model負責表示JavaScript對象,View負責UI界面顯示,兩者最大程度分離。

將模型和視圖聯系起來的是視圖模型。ViewModel負責將模型的數據同步到視圖中進行顯示,也負責將視圖的界面修改同步回模型更新數據。

臟值檢查:angular.js通過臟值檢查比較數據有無變化,決定是否更新視圖。

原理是當內存中存儲了copy_viewModel的副本時,當用戶的操作導致viewModel發生變化時,框架會將Copy _ viewModel與最新的viewModel進行深度比較,壹旦發現屬性發生變化,就會重新渲染與之綁定的DOM節點。

最簡單的方法是通過setInterval()定期輪詢檢測數據變化,角度觸發時進入臟值檢測。但是只允許指定的事件(如用戶點擊、輸入操作、ajax請求、setInterval、setTimeout等...),否則需要手動調用apply函數強制臟檢查。

數據劫持:vue.js采用數據劫持結合發布者-訂閱者模式的方法,通過Object.defineProperty()劫持各種屬性的setters。當數據發生變化時,getter向訂閱者發布消息,觸發相應的監控回調,從而更新數據和視圖。

示意圖告訴我們,數據屬性定義getter和setter來劫持屬性。當屬性值發生變化時,會通知watch對象,watch對象會再次觸發組件渲染函數,然後更新view上的DOM節點樹。

另壹方面,當在視圖上輸入數據時,它還會觸發數據更改和訂閱者觀察更新,以便模型數據可以實時更新視圖上的數據更改。這樣的過程就是vue的數據雙向綁定。

Vue通過數據劫持做數據綁定,核心方法是通過Object.defineProperty()劫持屬性來監控數據變化。

Object.defineProperty是ES5的壹個方法,可以直接在壹個對象上定義壹個新的屬性,也可以修改壹個已有的屬性並返回該對象。對象中有兩種主要形式的屬性描述符:數據描述符和訪問描述符。

數據描述符是具有可寫或未寫值的屬性。

訪問描述符是由壹對getter-setter函數描述的屬性。

描述符必須是兩種形式之壹;不能兩者同時進行。也就是說,有值和可寫,或者get和set。

屬性描述符包括:

我們已經知道如何實現數據的雙向綁定。首先要劫持和監控數據,所以需要設置壹個監聽觀察器來監控所有的屬性。如果屬性發生了變化,您需要告訴訂閱者觀察器看看它是否需要更新。因為有很多訂閱者,所以我們需要有壹個消息訂閱者Dep來收集這些訂閱者,然後在偵聽器觀察者和訂閱者觀察者之間統壹管理它們。然後,我們需要壹個指令解析器Compile,它掃描並解析每個節點元素,將相應的指令初始化為訂閱者觀察器,並替換模板數據或綁定相應的函數。此時,當訂閱者觀察器接收到相應屬性的變化時,它將執行相應的更新函數,從而更新視圖。

因此,接下來,我們執行以下四個步驟來實現數據的雙向綁定:

深度響應原理

分析Vue&的原理;實現雙向綁定MVVM

響應系統的基本原理。射流研究…

我只想監控壹個普通對象在JavaScript實現MVVM時的變化。

  • 上一篇:審計在西方和中國是如何產生和發展的?
  • 下一篇:金元是哪壹年?
  • copyright 2024歷史故事大全網