成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

Joyven / 1720人閱讀

摘要:概念理解重要特性雙向綁定和之間無耦合通過操作利用提供的機制自動實現(xiàn)的更新。實現(xiàn)說明解析不包括模板指令等因為模板編譯解析等和本文核心主題無關(guān)這些僅僅是基于雙向綁定的應(yīng)用場景。雙向綁定的核心是實現(xiàn)。

引言

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

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

mvvm概念理解

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

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

mvvm實現(xiàn)

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

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

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

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

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

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

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

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

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

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

觀察者體現(xiàn)

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

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

整個過程很好的體現(xiàn)了注冊-通知的機制。

總結(jié)

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

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/82649.html

相關(guān)文章

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

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

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

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

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

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

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

    摘要:雙向數(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賦予一個新...

    malakashi 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<