
資料的雙向系結
當資料發生變化,ViewModel能夠監聽到資料的這種變化,然后通知到對應的視圖做自動更新,而當用戶操作視圖,ViewModel 也能監聽到視圖的變化,然后通知資料做改動,這實際上就實作了資料的雙向系結
- Vue.js 是采用 Object.defineProperty 的 getter 和 setter ,并結合 觀察者模式 來實作資料系結的,
- 當把一個普通 Javascript 物件傳給 Vue 實體來作為它的 data 選項時,Vue 將遍歷它的屬性,并用Object.defineProperty()方法把它們轉化為 getter/setter方法,當data中的屬性被訪問時,則會呼叫getter方法;當data中的屬性被改變時,則會呼叫setter方法
- 名詞解釋
- 監聽器 Observer :利用 Object.defineProperty() 對屬性都加上 setter 和 getter實作資料劫持
- 決議器 Compile :決議 Vue 模板指令,將模板中的變數都替換成資料,然后初始化渲染頁面視圖
- 訂閱者 Watcher :Watcher 訂閱者是 Observer 和 Compile 之間通信的橋梁 ,主要的任務是訂閱 Observer 中的屬性值變化的訊息,當收到屬性值變化的訊息時,觸發決議器 Compile 中對應的更新函式,
- 訂閱器 Dep :用來收集訂閱者 Watcher,對監聽器 Observer 和 訂閱者 Watcher 進行統一管理,

-
詳解( 參考鏈接)
- 首先我們需要設定一個 監聽器Observer , 對資料物件進行遍歷,包括子屬性物件的屬性,利用 Object.defineProperty() **** 對屬性都加上 setter 和 getter ,這樣的話,給這個物件的某個值賦值,就會觸發 setter,那么就能監聽到了資料變化 ,如果屬性發上變化了,就需要告訴訂閱者Watcher看是否需要更新,
- 因為訂閱者是有很多個,所以我們需要有一個 訊息訂閱器Dep 來專門收集這些訂閱者,然后在監聽器Observer和訂閱者Watcher之間進行統一管理的,
- 接著,我們還需要有一個 指令決議器Compile , 決議 Vue 模板指令,將模板中的變數都替換成資料,然后初始化渲染頁面視圖,并將每個指令對應的節點系結更新函式,添加監聽資料的訂閱者,一旦資料有變動, 訂閱者Watcher 收到通知,呼叫更新函式進行資料更新
- 此時當 訂閱者Watcher 接收到相應屬性的變化,就會執行對應的更新函式,從而更新視圖,
歡迎留言~~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/18379.html
標籤:JavaScript
上一篇:SuperMap資料資訊問題
下一篇:filezilla問題
