vue雙向綁定簡(jiǎn)要分析

Vue是當(dāng)前很火的一款MVVM的輕量級(jí)框架,它是以數(shù)據(jù)驅(qū)動(dòng)和組件化的思想構(gòu)建的。因?yàn)樗峁┝撕?jiǎn)潔易于理解的api,使得我們很容易上手。

成都創(chuàng)新互聯(lián)是專業(yè)的柴桑網(wǎng)站建設(shè)公司,柴桑接單;提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行柴桑網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

Vue與MVVM 如果你之前已經(jīng)習(xí)慣了用jQuery操作DOM,學(xué)習(xí)Vue.js時(shí)請(qǐng)先拋開手動(dòng)操作DOM的思維,因?yàn)閂ue.js是數(shù)據(jù)驅(qū)動(dòng)的,你無需手動(dòng)操作DOM。Vue以數(shù)據(jù)為驅(qū)動(dòng),將自身的Dom元素與數(shù)據(jù)進(jìn)行綁定,一旦創(chuàng)建綁定,Dom和數(shù)據(jù)保持同步。

vue雙向綁定簡(jiǎn)要分析

其中ViewModel是Vue的核心,它是Vue的一個(gè)實(shí)例,作用于某個(gè)HTML元素上,可以是body也可以是某個(gè)id所指代的元素。雙向綁定主流雙向數(shù)據(jù)綁定實(shí)現(xiàn)原理

臟值檢測(cè) : 這是AngularJS實(shí)現(xiàn)雙向數(shù)據(jù)綁定的方式。 原理是 當(dāng)數(shù)據(jù)進(jìn)行變更的時(shí)候?qū)λ蠱odel和View的綁定關(guān)系進(jìn)行一次檢查,識(shí)別是否有數(shù)據(jù)進(jìn)行了變更,如果有變化則進(jìn)行處理,由于可能進(jìn)一步引發(fā)其他數(shù)據(jù)的改變,會(huì)再次循環(huán)這個(gè)過程,知道沒有數(shù)據(jù)的變化之后。發(fā)送數(shù)據(jù)到視圖重新渲染。 可想而知,這樣的方式性能不高。

數(shù)據(jù)劫持: Vue采用的是 ES5的 Object,defineProperty() 方法,使用getter/setter監(jiān)測(cè)對(duì)數(shù)據(jù)的操作,從而通知綁定是視圖進(jìn)行更新。 由于是在不同是數(shù)據(jù)上進(jìn)行觸發(fā),可以精確的更新綁定的視圖,而不是對(duì)所有的數(shù)據(jù)進(jìn)行檢測(cè)。

vue雙向綁定簡(jiǎn)要分析

Vue是通過數(shù)據(jù)劫持的方式進(jìn)行雙向數(shù)據(jù)綁定的,最核心的方法就是 Object.defineProperty來實(shí)現(xiàn)對(duì)數(shù)據(jù)的劫持,檢測(cè)數(shù)據(jù)的變化。
雙向綁定的實(shí)現(xiàn)分為三個(gè)步驟:
1.實(shí)現(xiàn)一個(gè)數(shù)據(jù)監(jiān)聽器,能夠?qū)?shù)據(jù)對(duì)象的所有屬性進(jìn)行監(jiān)聽,如有變動(dòng)可拿到最新值并通知訂閱者。
2.實(shí)現(xiàn)一個(gè)指令解析器,對(duì)每個(gè)元素的節(jié)點(diǎn)的指令進(jìn)行解析。根據(jù)指令模板替換數(shù)據(jù),以及綁定相應(yīng)的更新函數(shù)。
3.實(shí)現(xiàn)一個(gè)觀察者,能夠訂閱并收到每個(gè)屬性變化的通知,執(zhí)行指令綁定的相應(yīng)回調(diào)函數(shù),從而更新視圖。

實(shí)現(xiàn)雙向數(shù)據(jù)綁定核心代碼:

vue雙向綁定簡(jiǎn)要分析
vue雙向綁定簡(jiǎn)要分析 

Dep類是一個(gè)訂閱者類, 它具有一個(gè)訂閱者數(shù)組與當(dāng)前屬性對(duì)應(yīng)。關(guān)聯(lián)當(dāng)前數(shù)據(jù)和所有的 watcher 的依賴關(guān)系。
Dep.target是一個(gè)暴露出來的全局屬性,暫存Watcher, 再添加完之后就會(huì)釋放。
而在set中如果發(fā)現(xiàn)值的變換則通知所有訂閱者(watcher)更新視圖。

舉例

vue雙向綁定簡(jiǎn)要分析 

如果你對(duì)于Vue有一定了解的話,那么實(shí)現(xiàn)這個(gè)效果并不難。

<div id="demo">
 <p>{{message}}</p>
 <input type="text" v-model="message"/>
</div>

var App = new Vue({ 
 el: "#demo",
 data: { 
  message: 'Hello,World!'
 }
})

如果你想說我用jquery也可以實(shí)現(xiàn),的確是這樣:

 <div id="box">
   <p class="text"></p>
   <input type="text" id="inputText">
   <script type="text/javascript" src="jquery.js"></script>
   <script type="text/javascript">
    $("#inputText").on("input", function() {
      var value = $(this).val() 
      $('.text').text(value)
    })
   </script>

這么來形容吧:jquery開發(fā)項(xiàng)目好比是老式的紡織機(jī),而用Vue+Webpack開發(fā)好比是現(xiàn)代紡織工廠。區(qū)別就是一個(gè)上手容易,一個(gè)在生產(chǎn)效率,多成員協(xié)同,管理等方面卻是質(zhì)的飛躍。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

新聞標(biāo)題:vue雙向綁定簡(jiǎn)要分析
文章路徑:http://muchs.cn/article6/iepeig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、自適應(yīng)網(wǎng)站、商城網(wǎng)站、用戶體驗(yàn)品牌網(wǎng)站設(shè)計(jì)、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)