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