您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
03 vue訂閱者模式原理(Vue學習系列一 —— MVVM響應式系統的基本實現原理)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-07-05 07:18:29【】2人已围观
简介行深度比較,一旦發現有屬性發生變化,則重新渲染與之綁定的DOM節點。最簡單的方式就是通過setInterval()定時輪詢檢測數據變動,angular觸發時進入臟值檢測。但只限指定的事件(如:用戶點擊
最簡單的方式就是通過 setInterval() 定時輪詢檢測數據變動,angular觸發時進入臟值檢測。但只限 指定的事件 (如:用戶點擊,輸入操作,ajax請求,setInterval,setTimeout等...),否則需手動調用 apply 函數去強制執行一次臟檢查。
數據劫持 : vue.js 則是采用數據劫持結合發布者-訂閱者模式的方式,通過 Object.defineProperty() 來劫持各個屬性的 setter , getter 在數據變動時發布消息給訂閱者,觸發相應的監聽回調,而產生更新數據和視圖。
原理圖告訴我們,data屬性定義了getter、setter對屬性進行劫持,當屬性值改變是就會notify通知watch對象,而watch對象則會重新觸發組件呈現功能,繼而更新view上的DOM節點樹。
反之,view上輸入數據時,也會觸發data變更,也會觸發訂閱者watch更新,這樣子model數據就可以實時更新view上的數據變化。這樣一個過程就是vue的數據雙向綁定了。
vue是通過數據劫持的方式來做數據綁定的,其中最核心的方法便是通過 Object.defineProperty() 來實現對屬性的劫持,達到監聽數據變動的目的。
Object.defineProperty 是ES5一個方法,可以直接在一個對象上定義一個新屬性,或者修改一個已經存在的屬性,并返回這個對象,對象里目前存在的屬性描述符有兩種主要形式: 數據描述符 和 存取描述符 。
數據描述符 是一個擁有可寫或不可寫值的屬性。
存取描述符 是由一對getter-setter函數功能來描述的屬性。
描述符必須是兩種形式之一;不能同時是兩者。即:有值和可寫,或者可get和set
屬性描述符包括:
我們已經知道怎么實現數據的雙向綁定,首先要對數據進行劫持監聽,所以我們需要設置一個監聽器 Observer ,用來監聽所有屬性。如果屬性發上變化了,就需要告訴訂閱者 Watcher 看是否需要更新。因為訂閱者是有很多個,所以我們需要有一個消息訂閱器 Dep 來專門收集這些訂閱者,然后在監聽器 Observer 和訂閱者 Watcher 之間進行統一管理的。接著,我們還需要有一個指令解析器 Compile ,對每個節點元素進行掃描和解析,將相關指令對應初始化成一個訂閱者 Watcher ,并替換模板數據或者綁定相應的函數,此時當訂閱者 Watcher 接收到相應屬性的變化,就會執行對應的更新函數,從而更新視圖。
因此接下去我們執行以下4個步驟,實現數據的雙向綁定:
深入響應式原理
剖析Vue原理&實現雙向綁定MVVM
《響應式系統的基本原理》.js
JavaScript實現MVVM之我就是想監測一個普通對象的變化
能說說vue的響應式原理嗎?
Vue 是一個 MVVM 框架,核心是雙向數據綁定,VM(視圖模型)是作為 V(視圖) 和 M(模型)的橋梁。下面是對 Vue 響應式(雙向數據綁定)的理解,如果錯誤盡請指出,一起交流,共同進步。
Vue響應式原理核心是 數據劫持,采用 ES5 的 object.defineproperty 的 getter 和 setter 方法。從一個例子出發:
首先,在Vue初始化階段,通過 observer 對 data 中的屬性進行遞歸的劫持,包括 name、job_ undergo、a、b等
在 get階段也就是初始化視圖時,為每一個劫持的屬性分配一個 依賴收集器,主要收集當前屬性的觀察者對象,例子中 name 屬性在模板中有兩處被使用,那么 name 屬性的依賴收集器中就存放兩個觀察者對象
當點擊按鈕時,將 name 修改為 lisi 時,會觸發 observer 的 setter 函數,將 value 更新為 lisi 最新值,然后通知依賴收集器數據發生了更新。
依賴收集就是發布訂閱模式,依賴收集器會通知所有的觀察者對象,當前name 屬性有兩個觀察者對象。
觀察者對象調用對應的回調函數進行相關的處理和DOM更新
以上是純響應式原理的分析和總結,下面配一張流程圖:
很赞哦!(63)
相关文章
- 04 國際貿易實務論文選題推薦(電子商務學位課是什么)
- tiktok國際版下載安裝(蘋果tiktok國際版怎么下載?)
- 04 國際貿易支付貨幣排名(全球貨幣支付排名:人民幣占比2.26%,排第五,美元呢?)
- 04 國際貿易的運輸條款怎么寫啊(國際貿易運輸條款有哪些)
- 04 國際貿易政策與措施政策案例答案(2010年4月國際經濟法概論的試題及答案)
- tiktok國際版下載知乎(抖音上的國際聊天是真的嗎)
- 04 國際貿易實訓實驗報告500字寫實訓題(國際貿易實訓報告總結800字7篇)
- tiktok國際版下載安卓版本過低不(tiktok國際版怎么下載)
- tiktok國際版下載iPhone(蘋果手機怎么下載TikTok(抖音國際版))
- 04 國際貿易實務題庫及答案免費(電子商務專業主要學什么)