雙向資料繫結

2021-09-13 03:46:07 字數 1377 閱讀 6260

(2)mvvm

2. 總結mvvm

二、vue

(2) 實現mvvm主要包含兩個方面,資料變化更新檢視,檢視變化更新資料:

最近面試時老被問到雙向資料繫結。明明概念看了好幾遍,也總結了好幾次,但是還是被問住

參考文章

(很欣賞這篇部落格作者的一句話,「再長的路,一步步也能走完。再短的路,不邁開雙腳也無法到達。」送給自己)

mvc 屬於單項通訊

mvc是model-view- controller的簡寫,即模型-檢視-控制器

c即controller指的是頁面業務邏輯(在後端實現)

也就是view跟model,必須通過controller來承上啟下

mvvm是model-view-viewmodel的簡寫。即模型-檢視-檢視模型。

資料雙向繫結的概念

由上圖可以看出

這兩個方法都實現的,我們稱為資料雙向繫結

在mvvm的框架下檢視和模型是不能直接通訊的。它們通過viewmodel來通訊。

並且mvvm中的view 和 viewmodel可以互相通訊

vue就是基於mvvm模式實現的一套框架

在vue中:

vue資料雙向繫結是通過資料劫持結合發布者-訂閱者模式的方式來實現的

vue是通過object.defineproperty()來實現資料劫持的。

它可以來控制乙個物件屬性的一些特有操作,比如讀寫權、是否可以列舉,這裡我們主要先來研究下它對應的兩個描述屬性get和set

關鍵點在於data如何更新view,因為view更新data其實可以通過事件監聽即可,比如input標籤監聽 『input』 事件就可以實現了。所以我們著重來分析下,當資料改變,如何更新檢視的。

資料更新檢視的重點是如何知道資料變了,只要知道資料變了,那麼接下去的事都好處理。如何知道資料變了,其實上文我們已經給出答案了,就是通過object.defineproperty( )對屬性設定乙個set函式,當資料改變了就會來觸發這個函式,所以我們只要將一些需要更新的方法放在這裡面就可以實現data更新view了。

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

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

實現乙個解析器compile,可以掃瞄和解析每個節點的相關指令,並根據初始化模板資料以及初始化相應的訂閱器。

(實現具體**參考原文)

雙向資料繫結

雙向資料繫結基於mvvm框架,vue屬於mvvm框架 mvvm m等於model,v等於view,即model改變影響view,view改變影響model 1.雙向資料繫結 必須在使用在表單裡面 使用v model繫結資料,實現動態資料變化 js export default 獲取動態資料 獲取表單...

資料雙向繫結原理

angularjs 採用 髒值檢測 的方式 資料發生變更後,對於所有的資料和檢視的繫結關係進行一次檢測,識別是否有資料發生了改變,有變化進行處理,可能進一步引發其他資料的改變,所以這個過程可能會迴圈幾次,一直到不再有資料變化發生後,將變更的資料傳送到檢視,更新頁面展現。如果是手動viewmodel ...

雙向資料繫結原理

資料劫持 vuejs 則使用 es5 提供的 object.defineproperty 方法,監控對資料的操作,從而可以自動觸發資料同步。並且,由於是在不同的資料上觸發同步,可以精確的將變更傳送給繫結的檢視,而不是對所有的資料都執行一次檢測。var obj object.definepropert...