成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

訂閱發(fā)布和vue雙向綁定

Joyven / 1703人閱讀

摘要:概念理解重要特性雙向綁定和之間無(wú)耦合通過(guò)操作利用提供的機(jī)制自動(dòng)實(shí)現(xiàn)的更新。實(shí)現(xiàn)說(shuō)明解析不包括模板指令等因?yàn)槟0寰幾g解析等和本文核心主題無(wú)關(guān)這些僅僅是基于雙向綁定的應(yīng)用場(chǎng)景。雙向綁定的核心是實(shí)現(xiàn)。

引言

最近在看vue的源碼,有些感觸,下面闡述一些個(gè)人理解。
之前寫過(guò)一篇文章,是講述關(guān)于觀察者模式的,與本文主旨有關(guān),需要的朋友可以看一下。

vue的核心是mvvm,vue2又增加了虛擬dom。
我的研究方向也是以這兩個(gè)為主。
本文主要講述mvvm,至于vdom(主要研究方向是整個(gè)思想和diff算法)下次再論述。

mvvm概念理解

m(model)v(view)vm(view-model),重要特性雙向綁定,m和v之間無(wú)耦合,通過(guò)操作m,利用vm提供的機(jī)制,自動(dòng)實(shí)現(xiàn)v的更新。用過(guò)vue應(yīng)該會(huì)有較深體會(huì)。

和其相對(duì)比比較容易誤解是mvc,m(model)v(view)c(controller),和mvvm的顯著區(qū)別是m和v之間存在耦合,業(yè)務(wù)邏輯集中在c當(dāng)中。 用過(guò)springmvc應(yīng)該會(huì)有體會(huì)。

mvvm實(shí)現(xiàn)

說(shuō)明 解析不包括模板、指令、Mustache等,因?yàn)槟0寰幾g、解析等和本文核心主題無(wú)關(guān),這些僅僅是基于雙向綁定的應(yīng)用場(chǎng)景。本文主題想討論的是->結(jié)合觀察者模式簡(jiǎn)單實(shí)現(xiàn)雙向綁定的核心。

雙向綁定的核心是實(shí)現(xiàn)Dep、observer、Watcher。

Dep 存放收集Watcher,當(dāng)訂閱的消息發(fā)生時(shí)(即數(shù)據(jù)發(fā)生改變),notify所有watch,讓訂閱者執(zhí)行實(shí)現(xiàn)自己定義的update邏輯

Watcher 轉(zhuǎn)化表達(dá)式,收集依賴,當(dāng)被觀察的值發(fā)生變化時(shí),觸發(fā)callback。重要update方法,當(dāng)model數(shù)據(jù)發(fā)生變化時(shí),修改依賴指令或組件中的值,觸發(fā)callback函數(shù)

observer 是一個(gè)類,附屬于每一個(gè)被觀察的對(duì)象(即model數(shù)據(jù)),defineReactive=>observe方式給對(duì)象以及子屬性(實(shí)質(zhì)調(diào)用defineProperty方式)建立get和set屬性方法

結(jié)合下圖,以便于大致理解。

關(guān)于其執(zhí)行流程具體如下,上述示例圖中畫的其實(shí)也只是大致流程,實(shí)現(xiàn)過(guò)程中有很多細(xì)節(jié),列舉幾個(gè)我認(rèn)為比較重要的。

this.get()執(zhí)行的時(shí)候,會(huì)把Dep的全局tatget對(duì)象置為當(dāng)前對(duì)象,而data的get方法以此作為judge調(diào)用者依據(jù),從而完成依賴收集,收集完cleanupDeps,將其置空,以免影響下次收集。

當(dāng)data持續(xù)變化時(shí),queueWatcher中has[id]的judge防止watcher重復(fù)添加,nextTick的使用保證view更新時(shí)使用的最新值,異步的應(yīng)用有三種實(shí)現(xiàn)方式(兼容性考慮),基于優(yōu)先級(jí)順序依次是Promise、MutationObserver、setTimeout。

data變化,view更新的實(shí)現(xiàn)是通過(guò)notify->run-> expOrFn.call(vm,vm)->vm._update(vnode, hydrating)->vm.__patch__(prevVnode, vnode)一系列調(diào)用過(guò)程實(shí)現(xiàn)。

觀察者體現(xiàn)

至于觀察者模式是如何在其中體現(xiàn)呢?

observer和Watcher是一對(duì)多的關(guān)系,連接機(jī)制通過(guò)dep(其中注冊(cè)了一些觀察者), 消息觸發(fā)根源是user,其行為導(dǎo)致model改變,被觀察者(data)進(jìn)行notify, 具體訂閱者watcher執(zhí)行自己預(yù)先定義好的update邏輯。

整個(gè)過(guò)程很好的體現(xiàn)了注冊(cè)-通知的機(jī)制。

總結(jié)

這篇文章分析基于Vue(Version 2.2.6),示例中圖畫的丑,畫圖真心不易。個(gè)人觀點(diǎn),如有不同理解,歡迎comment。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82649.html

相關(guān)文章

  • Vue源碼解析(二)Vue雙向綁定講解及實(shí)現(xiàn)

    摘要:上篇文章,我們講解了的屬性映射和方法的重定義,鏈接地址如下源碼解析一屬性映射和函數(shù)引用的重定義這篇文章給大家?guī)?lái)的是的雙向綁定講解。這就是的雙向綁定。使用定時(shí)器定時(shí)檢查的值,發(fā)生變化就通知訂閱者。這個(gè)方法不好,定時(shí)器不能實(shí)時(shí)反應(yīng)變化。 文章中的代碼時(shí)階段,可以下載源碼測(cè)試一下。git項(xiàng)目地址:https://github.com/xubaodian/...項(xiàng)目使用webpack構(gòu)建,下...

    ckllj 評(píng)論0 收藏0
  • 160行代碼仿Vue實(shí)現(xiàn)極簡(jiǎn)雙向綁定[詳細(xì)注釋]

    摘要:兼容性更詳細(xì)的可以看一下實(shí)現(xiàn)思路系列的雙向綁定,關(guān)鍵步驟實(shí)現(xiàn)數(shù)據(jù)監(jiān)聽器,用重寫數(shù)據(jù)的,值更新就在中通知訂閱者更新數(shù)據(jù)。 showImg(https://segmentfault.com/img/remote/1460000015375220?w=640&h=426); 前言 現(xiàn)在的前端面試不管你用的什么框架,總會(huì)問(wèn)你這個(gè)框架的雙向綁定機(jī)制,有的甚至要求你現(xiàn)場(chǎng)實(shí)現(xiàn)一個(gè)雙向綁定出來(lái),那對(duì)于...

    endiat 評(píng)論0 收藏0
  • vue 雙向數(shù)據(jù)綁定的實(shí)現(xiàn)學(xué)習(xí)(一)

    摘要:雙向數(shù)據(jù)綁定簡(jiǎn)言之?dāng)?shù)據(jù)動(dòng)頁(yè)面動(dòng),頁(yè)面動(dòng),數(shù)據(jù)動(dòng)典型的應(yīng)用就是在做表單時(shí)候,輸入框的內(nèi)容改動(dòng)后,跟該輸入框的的值改動(dòng)??垂倬W(wǎng)上的這個(gè)的演示案例雙向數(shù)據(jù)綁定的好處要說(shuō)出這個(gè)好處的時(shí)候,也只有在實(shí)際場(chǎng)景中才能對(duì)應(yīng)的顯示出來(lái)。 前言:本系列學(xué)習(xí)筆記從以下幾個(gè)點(diǎn)展開 什么是雙向數(shù)據(jù)綁定 雙向數(shù)據(jù)綁定的好處 怎么實(shí)現(xiàn)雙向數(shù)據(jù)綁定 實(shí)現(xiàn)雙向數(shù)據(jù)數(shù)據(jù)綁定需要哪些知識(shí)點(diǎn) 數(shù)據(jù)劫持 發(fā)布訂閱模式 ...

    anonymoussf 評(píng)論0 收藏0
  • Vue面試題精選:Vue原理以及雙向數(shù)據(jù)綁定的實(shí)戰(zhàn)過(guò)程

    摘要:雙向數(shù)據(jù)綁定指的是,將對(duì)象屬性變化與視圖的變化相互綁定。數(shù)據(jù)雙向綁定已經(jīng)了解到是通過(guò)數(shù)據(jù)劫持的方式來(lái)做數(shù)據(jù)綁定的,其中最核心的方法便是通過(guò)來(lái)實(shí)現(xiàn)對(duì)屬性的劫持,達(dá)到監(jiān)聽數(shù)據(jù)變動(dòng)的目的。和允許觀察數(shù)據(jù)的更改并觸發(fā)更新。 1 MVVM 雙向數(shù)據(jù)綁定指的是,將對(duì)象屬性變化與視圖的變化相互綁定。換句話說(shuō),如果有一個(gè)擁有name屬性的user對(duì)象,與元素的內(nèi)容綁定,當(dāng)給user.name賦予一個(gè)新...

    malakashi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<