摘要:當然這個是簡單版本的復雜版本的就如果只是簡單實現一下的數據綁定還是很簡單的只要將思路理清楚就可以。
這篇仿Vue數據綁定的簡單實現,是我看了一些文章之后,把他們的代碼研究懂了之后寫出來的。當然,這個是簡單版本的,復雜版本的就...
如果只是簡單實現一下Vue的數據綁定還是很簡單的,只要將思路理清楚就可以。寫的時候考慮的問題就是2點。
問題:
1)如何實現將數據層的數據顯示到視圖上
2)如何在視圖上的數據改變后,通知數據層相應的數據發生了變化
3)如何讓兩者聯系起來,當一個數據改變時,視圖上的所有數據層的數據進行更新
第一個問題要將數據層的數據顯示到視圖上,很明顯這個需要使用DOM操作,先判斷 el 下的子元素上的屬性是否有關鍵字(如: v-model、v-bind),如果有就將其與 data 中的key來進行對比,然后data里的值渲染到頁面上。這里需要用到遞歸,從而使el下的每個層級的元素屬性都進行一次篩選。
第二個問題可以通過在相應的元素(input)上進行事件監聽,當視圖上的數據發生了變化就改變相對應的數據成數據。這兩者之間需要一個監聽器,從而使當一個改變時,另外一個也跟著改變。
第三個問題實現需要利用發布訂閱模式和ES5的Object.defineProperty()。首先要創建一個訂閱者,里面有一個方法,使視圖層上的值等于數據層的數據。在進行DOM篩選時,將對應的數據、key、元素傳入訂閱者,在將這個訂閱者放在一個對象中,這個對象的key就是data的key。然后通過ES5的Object.defineProperty()來對data里的數據進行數據劫持,當data里的數據被重新設置,會觸發set函數,然后觸發監聽者。
具體代碼如下:
Document {{name}}
這篇文章主要是參考于https://segmentfault.com/a/11... ,高難度的那個是https://www.cnblogs.com/canfo...。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104297.html
摘要:儲存訂閱器因為屬性被監聽,這一步會執行監聽器里的方法這一步我們把也給弄了出來,到這一步我們已經實現了一個簡單的雙向綁定了,我們可以嘗試把兩者結合起來看下效果。總結本文主要是對雙向綁定原理的學習與實現。 當今前端天下以 Angular、React、vue 三足鼎立的局面,你不選擇一個陣營基本上無法立足于前端,甚至是兩個或者三個陣營都要選擇,大勢所趨。 所以我們要時刻保持好奇心,擁抱變化,...
摘要:雙向數據綁定可算是前端領域經久不衰的熱詞,不管是前端開發還是面試都會有所涉及。因此,中的挺身而出,拯救了中對數組數據處理的不足。有興趣的朋友請期待筆者的下一篇博客,討論下用實現雙向數據綁定。 雙向數據綁定可算是前端領域經久不衰的熱詞,不管是前端開發還是面試都會有所涉及。而且不同的框架也想盡一切辦法去實現這一特性,比如:Knockout / Backbone --- 發布-訂閱模式Ang...
摘要:雙向數據綁定指的是,將對象屬性變化與視圖的變化相互綁定。數據雙向綁定已經了解到是通過數據劫持的方式來做數據綁定的,其中最核心的方法便是通過來實現對屬性的劫持,達到監聽數據變動的目的。和允許觀察數據的更改并觸發更新。 1 MVVM 雙向數據綁定指的是,將對象屬性變化與視圖的變化相互綁定。換句話說,如果有一個擁有name屬性的user對象,與元素的內容綁定,當給user.name賦予一個新...
摘要:下圖展示了實現雙向綁定的流程實現一個簡單的雙向綁定雙向綁定最最最初級進階版操作是非常耗時和好性能,所以在優化過程中先從操作入手。 接觸Vue有一段時間了,但是對于其雙向綁定的實現一直是似懂非懂,今天看到一篇寫的比較好的文章 傳送門1 根據原作者的指導自己也去實現了一遍簡單的 demo (本文的demo均基于Object.defineProperty 實現數據劫持,利用了對Vue.js實...
閱讀 1410·2021-11-17 09:33
閱讀 3018·2021-10-13 09:39
閱讀 2686·2021-10-09 10:01
閱讀 2447·2021-09-29 09:35
閱讀 3891·2021-09-26 10:01
閱讀 3518·2019-08-26 18:37
閱讀 3149·2019-08-26 13:46
閱讀 1910·2019-08-26 13:39