您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
03 發布者訂閱者模式vue(Vue 面試中常問知識點整理)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-06-29 13:10:42【】3人已围观
简介/p>同時要主要我while的判斷條件。判斷是否有子節點,因為我每次appendChild都把node中的第一個子節點劫持走了,node中就會少一個,直到沒有的時候,child也就變成了undefin
同時要主要我while的判斷條件。判斷是否有子節點,因為我每次appendChild都把node中的第一個子節點劫持走了,node中就會少一個,直到沒有的時候,child也就變成了undefined,也就終止了循環。
來實現內容綁定
我們要考慮兩個問題,一個是如何綁定要input上,另一個是如何綁定要文本節點中。
這樣思路就來了,我們已經獲取到了div的所以子節點了,就在DocumentFragment里面,然后對每一個節點進行處理,看是不是有跟vm實例中有關聯的內容,如果有,修改這個節點的內容。然后重新添加入DocumentFragment中。
首先,我們寫一個處理每一個節點的函數,如果有input綁定v-model屬性或者有{ { xxx }}的文本節點出現,就進行內容替換,替換為vm實例中的data中的內容
然后,在向碎片化文檔中添加節點時,每個節點都處理一下。
創建Vue的實例化函數
效果圖如下:
我們成功將內容都綁定到了輸入框與文本節點上!
4、實現任務2——【view => model
對于此任務,我們從輸入框考慮,輸入框的問題,輸入框如何改變data。我們通過事件監聽器keyup,input等,來獲取到最新的value,然后通過Object.defineProperty將獲取的最新的value,賦值給實例vm的text,我們把vm實例中的data下的text通過Object.defineProperty設置為訪問器屬性,這樣給vm.text賦值,就觸發了set。set函數的作用一個是更新data中的text,另一個等到任務三再說。
首先實現一個響應式監聽屬性的函數。一旦有賦新值就發生變化
然后,實現一個觀察者,對于一個實例 每一個屬性值都進行觀察。
改寫編譯函數,注意由于改成了訪問器屬性,訪問的方法也產生變化,同時添加了事件監聽器,把實例的text值隨時更新
實例函數中,觀察data中的所有屬性值,注意增添了observe
最終我們改變input中的內容能改變data中的數據,單頁面卻沒有刷新
4、實現任務3——【model => view】
通過修改vm實例的屬性 該改變輸入框的內容 與 文本節點的內容。
這里涉及到一個問題 需要我們注意,當我們修改輸入框,改變了vm實例的屬性,這是1對1的。
但是,我們可能在頁面中多處用到 data中的屬性,這是1對多的。也就是說,改變1個model的值可以改變多個view中的值。
這就需要我們引入一個新的知識點:
訂閱/發布者模式
訂閱發布模式(又稱觀察者模式)定義了一種一對多的關系,讓多個觀察者同時監聽某一個主題對象,這個主題對象的狀態發生改變時就會通知所有觀察者對象。
發布者發出通知 => 主題對象收到通知并推送給訂閱者 => 訂閱者執行相應操作
1
舉個例子:
之前提到的set函數的第二個作用 就是來提醒訂閱者 進行noticy操作,告訴他們:“我的text變了!” 文本節點變成了訂閱者,接到消息后,立馬進行update操作
回顧一下,每當 new 一個 Vue,主要做了兩件事:第一個是監聽數據:observe(data),第二個是編譯 HTML:nodeToFragement(id)。
在監聽數據的過程中,我們會為 data 中的每一個屬性生成一個主題對象 dep。
在編譯 HTML 的過程中,會為每個與數據綁定相關的節點生成一個訂閱者 watcher,watcher 會將自己添加到相應屬性的 dep 容器中。
我們已經實現:修改輸入框內容 => 在事件回調函數中修改屬性值 => 觸發屬性的 set 方法。
接下來我們要實現的是:發出通知 dep.notify() => 觸發訂閱者的 update 方法 => 更新視圖。
這里的關鍵邏輯是:如何將 watcher 添加到關聯屬性的 dep 中。
注意: 我把直接賦值的操作改為了 添加一個 Watcher 訂閱者
那么,Watcher又該做些什么呢?
首先,將自己賦給了一個全局變量 Dep.target;
其次,執行了 update 方法,進而執行了 get 方法,get 的方法讀取了 vm 的訪問器屬性,從而觸發了訪問器屬性的 get 方法,get 方法中將該 watcher 添加到了對應訪問器屬性的 dep 中;
再次,獲取屬性的值,然后更新視圖。
最后,將 Dep.target 設為空。因為它是全局變量,也是 watcher 與 dep 關聯的唯一橋梁,任何時刻都必須保證 Dep.target 只有一個值。
最終我們就實現了這個雙向數據綁定功能,雖然很繁瑣,但我相信,你多打幾遍,一定會對你有所幫助,加油吧!!
很赞哦!(35215)
相关文章
- 02 上海恭匯貿易有限公司是什么店(店鋪廣播稿)
- 02 上海建工海外部怎么樣(上海建工海外事業部招聘的本科生進去后是正式員工還是外聘員工,一般會去哪,福利待遇在同行怎么樣)
- 07 youtube官網中文版評論怎么發筆記評論(美國留學:如何自學AP課程 如何準備AP考試)
- 07 youtube官網網頁版下載官方版買粉絲(在Ubuntu上有什么必裝的實用軟件?)
- 07 youtube官網買粉絲是什么怎么做如何制作(APP線上推廣有哪些免費的推廣方式)
- 07 youtube官網買粉絲下載圖片格式是什么他們(有沒有哪些很全面的美術生需要用到的找靈感的設計網站?)
- 07 youtube官網買粉絲是什么呢怎么回復最好(you tu be的官網是多少?)
- 07 youtube官網買粉絲下載安裝不了軟件包(you tu be的官網是多少?)
- 07 youtube官網網頁版下載官方完整地圖pdf(明星玩的像電腦樣直板的那是什么(就觸屏的,像電腦,但卻是像一塊板,平 平的) 可以用來做什么???)
- 07 youtube官網網頁版下載安裝包在哪(如何購買騰訊手游買粉絲)
热门文章
站长推荐
07 youtube官網網頁版下載安裝到ppt上(電腦不用軟件怎么錄屏)
02 上海市貿易學校中考錄取分數線(上海市甘泉外國語中學錄取分數線)
07 youtube官網電腦版下載官方完整版本(you tu be的官網是多少?)
02 上海市區網紅打卡點(上海都有哪些比較文藝的網紅打卡點?)
07 youtube官網買粉絲是什么怎么填啊(ios app上架流程是什么,怎樣避免提交審核被拒)
02 上海志唐貿易有限公司(1943年的上海發生了什么事情)
07 youtube官網入口下載手機資源機能買不(買粉絲直播間在哪 買粉絲直播怎么弄)
02 上海市貿易學校郵政編碼(有人知道“上海市滬東中學”嘛?)