(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...