您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
03 vue訂閱者模式原理(Vue學習系列一 —— MVVM響應式系統的基本實現原理)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-06-05 03:40:09【】3人已围观
简介行深度比較,一旦發現有屬性發生變化,則重新渲染與之綁定的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更新
以上是純響應式原理的分析和總結,下面配一張流程圖:
很赞哦!(4)
相关文章
- 01 youtube官網入口鏈接安卓手機微(請問最好用的在線二維碼生成器有哪些)
- 03 南京大學國際經濟與貿易考研科目(我是一名自考本科生,想考研,學經濟,想去南京,請問南京的哪個或哪幾個大學的經濟學和財會方面比較好一)
- 01 youtube官網入口鏈接知乎鹽選作者(知乎鹽選會員怎么白嫖)
- 01 youtube官網入口鏈接安卓子系統應用商店(chromecasttv禁止電視機供電)
- 03 南京大學國際經濟與貿易考研科目(我是一名自考本科生,想考研,學經濟,想去南京,請問南京的哪個或哪幾個大學的經濟學和財會方面比較好一)
- 03 十大網紅炒飯名字(現在的網紅美食越來越多,你吃過揚州炒飯味道的雪糕嗎?)
- 01 youtube官網入口鏈接知乎鹽選會員和(怎么在支付寶中免費兌換知乎鹽選會員)
- 03 十三種貿易術語的區別(表格)(13種貿易術語的詳細介紹?)
- 01 youtube官網入口鏈接是否有效可通過買粉絲獲取(網站seo關鍵詞軟件工具有哪些)
- 03 華為海外留學生招聘會(留學生華為招聘容易過嗎)
热门文章
站长推荐
01 youtube官網入口鏈接在線播放網頁音樂(有沒有可以隨意使用的無版權音樂資源庫?)
01 youtube官網打不開原因和處理方案及(為什么youtube打不開)
01 youtube官網入口鏈接知乎網頁版入口官網(比百度搜索更全面的搜索引擎是哪?)
01 youtube官網入口鏈接安卓子系統打(chromecasttv禁止電視機供電)
03 賣年貨群好聽的名字(過年買年貨作文400字小學六年級(合集))
01 youtube官網打不開原因和處理措施包括哪些土石(youtube為什么打不開了呢?)
03 單個視頻播放量破百萬(《月光變奏曲》原著閱讀量破百萬,影視化后播放量才數十萬,對此你怎么看?)
03 華科和對外經貿的金融哪個好(復旦什么專業最賺錢)