vue雙向綁定簡要分析
Vue是當前很火的一款MVVM的輕量級框架,它是以數(shù)據(jù)驅動和組件化的思想構建的。因為它提供了簡潔易于理解的api,使得我們很容易上手。
Vue與MVVM 如果你之前已經(jīng)習慣了用jQuery操作DOM,學習Vue.js時請先拋開手動操作DOM的思維,因為Vue.js是數(shù)據(jù)驅動的,你無需手動操作DOM。Vue以數(shù)據(jù)為驅動,將自身的Dom元素與數(shù)據(jù)進行綁定,一旦創(chuàng)建綁定,Dom和數(shù)據(jù)保持同步。
其中ViewModel是Vue的核心,它是Vue的一個實例,作用于某個HTML元素上,可以是body也可以是某個id所指代的元素。雙向綁定主流雙向數(shù)據(jù)綁定實現(xiàn)原理
臟值檢測 : 這是AngularJS實現(xiàn)雙向數(shù)據(jù)綁定的方式。 原理是 當數(shù)據(jù)進行變更的時候對所有Model和View的綁定關系進行一次檢查,識別是否有數(shù)據(jù)進行了變更,如果有變化則進行處理,由于可能進一步引發(fā)其他數(shù)據(jù)的改變,會再次循環(huán)這個過程,知道沒有數(shù)據(jù)的變化之后。發(fā)送數(shù)據(jù)到視圖重新渲染。 可想而知,這樣的方式性能不高。
數(shù)據(jù)劫持: Vue采用的是 ES5的 Object,defineProperty() 方法,使用getter/setter監(jiān)測對數(shù)據(jù)的操作,從而通知綁定是視圖進行更新。 由于是在不同是數(shù)據(jù)上進行觸發(fā),可以精確的更新綁定的視圖,而不是對所有的數(shù)據(jù)進行檢測。
Vue是通過數(shù)據(jù)劫持的方式進行雙向數(shù)據(jù)綁定的,最核心的方法就是 Object.defineProperty來實現(xiàn)對數(shù)據(jù)的劫持,檢測數(shù)據(jù)的變化。
雙向綁定的實現(xiàn)分為三個步驟:
1.實現(xiàn)一個數(shù)據(jù)監(jiān)聽器,能夠對數(shù)據(jù)對象的所有屬性進行監(jiān)聽,如有變動可拿到最新值并通知訂閱者。
2.實現(xiàn)一個指令解析器,對每個元素的節(jié)點的指令進行解析。根據(jù)指令模板替換數(shù)據(jù),以及綁定相應的更新函數(shù)。
3.實現(xiàn)一個觀察者,能夠訂閱并收到每個屬性變化的通知,執(zhí)行指令綁定的相應回調函數(shù),從而更新視圖。
實現(xiàn)雙向數(shù)據(jù)綁定核心代碼:
Dep類是一個訂閱者類, 它具有一個訂閱者數(shù)組與當前屬性對應。關聯(lián)當前數(shù)據(jù)和所有的 watcher 的依賴關系。
Dep.target是一個暴露出來的全局屬性,暫存Watcher, 再添加完之后就會釋放。
而在set中如果發(fā)現(xiàn)值的變換則通知所有訂閱者(watcher)更新視圖。
舉例
如果你對于Vue有一定了解的話,那么實現(xiàn)這個效果并不難。
<div id="demo"> <p>{{message}}</p> <input type="text" v-model="message"/> </div> var App = new Vue({ el: "#demo", data: { message: 'Hello,World!' } })
如果你想說我用jquery也可以實現(xiàn),的確是這樣:
<div id="box"> <p class="text"></p> <input type="text" id="inputText"> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> $("#inputText").on("input", function() { var value = $(this).val() $('.text').text(value) }) </script>
這么來形容吧:jquery開發(fā)項目好比是老式的紡織機,而用Vue+Webpack開發(fā)好比是現(xiàn)代紡織工廠。區(qū)別就是一個上手容易,一個在生產(chǎn)效率,多成員協(xié)同,管理等方面卻是質的飛躍。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
js檢測IE8及以下瀏覽器版本并做出提示的函數(shù)代碼
這篇文章主要介紹了js檢測IE8及以下瀏覽器版本并做出提示的函數(shù)代碼,需要的朋友可以參考下2023-02-02如何讓一個層關閉之后,就算刷新頁面了也不顯示。除非關閉頁面再次打開
這個功能,一般可用于廣告的顯示,當關閉后,就不顯示,除非重新關閉打開,增加用戶體驗2008-09-09