答:vue.js 是採用資料劫持結合發布者-訂閱者模式的方式,通過object.defineproperty()
來劫持各個屬性的setter
,getter
,在資料變動時發布訊息給訂閱者,觸發相應的監聽**。
具體步驟:
第一步:需要observe的資料物件進行遞迴遍歷,包括子屬性物件的屬性,都加上setter
和getter
這樣的話,給這個物件的某個值賦值,就會觸發setter
,那麼就能監聽到了資料變化
第二步:compile解析模板指令,將模板中的變數替換成資料,然後初始化渲染頁面檢視,並將每個指令對應的節點繫結更新函式,新增監聽資料的訂閱者,一旦資料有變動,收到通知,更新檢視
第三步:watcher訂閱者是observer和compile之間通訊的橋梁,主要做的事情是:
1、在自身例項化時往屬性訂閱器(dep)裡面新增自己
2、自身必須有乙個update()方法
3、待屬性變動dep.notice()通知時,能呼叫自身的update()方法,並觸發compile中繫結的**,則功成身退。
第四步:mvvm作為資料繫結的入口,整合observer、compile和watcher三者,通過observer來監聽自己的model資料變化,通過compile來解析編譯模板指令,最終利用watcher搭起observer和compile之間的通訊橋梁,達到資料變化 -> 檢視更新;檢視互動變化(input) -> 資料model變更的雙向繫結效果。
Vue資料雙向繫結原理是什麼?
面試官 說下vue資料雙向繫結原理是什麼?me 固定回答 vue的資料雙向繫結原理是資料劫持,結合發布訂閱者模式,通過object.defineproperty 來劫持各個屬性的setter,getter屬性,當資料變化時發布訊息給訂閱者,觸發對應的 函式。面試官 可以具體說下嗎?詳細一點?me 這...
vue雙向資料繫結原理
vue應用的是mvvm框架,view和model分離,然後通過vm雙向資料繫結,div 原生物件即資料 var data 建立乙個 viewmodel 例項 var vm new vue 然而乙個動態資料的繫結,是怎麼實現的呢,首先vue利用es5的defineproperty方法裡的get,set...
vue雙向資料繫結原理
text id text show p var text document.getelementbyid text show document.getelementbyid show var model object.defineproperty model,name set function ne...