最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談vuejs實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)視圖原理

 更新時(shí)間:2018年02月23日 13:37:08   作者:CaiBoBo  
這篇文章主要介紹了淺談vuejs實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)視圖原理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

什么是數(shù)據(jù)驅(qū)動(dòng)

數(shù)據(jù)驅(qū)動(dòng)是vuejs最大的特點(diǎn)。在vuejs中,所謂的數(shù)據(jù)驅(qū)動(dòng)就是當(dāng)數(shù)據(jù)發(fā)生變化的時(shí)候,用戶界面發(fā)生相應(yīng)的變化,開發(fā)者不需要手動(dòng)的去修改dom。

比如說我們點(diǎn)擊一個(gè)button,需要元素的文本進(jìn)行是和否的切換。在jquery刀耕火種的年代中,對(duì)于頁面的修改我們一般是這樣的一個(gè)流程,我們對(duì)button綁定事件,然后獲取文案對(duì)應(yīng)的元素dom對(duì)象,然后根據(jù)切換修改該dom對(duì)象的文案值。

而對(duì)于vuejs實(shí)現(xiàn)這個(gè)功能的流程,只需要在button元素上指明事件,同時(shí)聲明對(duì)應(yīng)文案的屬性,點(diǎn)擊事件的時(shí)候改變屬性的值,對(duì)應(yīng)元素的文本就能夠自動(dòng)的進(jìn)行切換,我們不需要像以前那樣手動(dòng)的操作dom。

簡(jiǎn)而言之,就是vuejs幫我們封裝了數(shù)據(jù)和dom對(duì)象操作的映射,我們只需要關(guān)心數(shù)據(jù)的邏輯處理,數(shù)據(jù)的變化就能夠自然的通知頁面進(jìn)行頁面的重新渲染。

這樣做的確實(shí)給我們帶來的好處,我們不需要再在代碼中頻繁地去操作dom了,在實(shí)際項(xiàng)目中,我們有很大部分代碼都是在數(shù)據(jù)修改以后,手動(dòng)操作重新渲染頁面元素,當(dāng)頁面越來越復(fù)雜的時(shí)候,頁面代碼組織會(huì)越來難以維護(hù)。同時(shí),js對(duì)dom的頻繁操作,會(huì)使得頁面代碼的出錯(cuò)概率高,頁面的視圖展示會(huì)融合在js代碼中,對(duì)于頁面視圖顯示的升級(jí)也不友好。

那么vuejs是如何實(shí)現(xiàn)這種數(shù)據(jù)驅(qū)動(dòng)的呢?

MVVM框架

Vuejs的數(shù)據(jù)驅(qū)動(dòng)是通過MVVM這種框架來實(shí)現(xiàn)的。MVVM框架主要包含3個(gè)部分:model、view和 viewmodel。

Model:指的是數(shù)據(jù)部分,對(duì)應(yīng)到前端就是javascript對(duì)象

View:指的是視圖部分,對(duì)應(yīng)前端就是dom

Viewmodel:就是連接視圖與數(shù)據(jù)的中間件

數(shù)據(jù)(Model)和視圖(View)是不能直接通訊的,而是需要通過ViewModel來實(shí)現(xiàn)雙方的通訊。當(dāng)數(shù)據(jù)變化的時(shí)候,viewModel能夠監(jiān)聽到這種變化,并及時(shí)的通知view做出修改。同樣的,當(dāng)頁面有事件觸發(fā)時(shí),viewMOdel也能夠監(jiān)聽到事件,并通知model進(jìn)行響應(yīng)。Viewmodel就相當(dāng)于一個(gè)觀察者,監(jiān)控著雙方的動(dòng)作,并及時(shí)通知對(duì)方進(jìn)行相應(yīng)的操作。

Vuejs的數(shù)據(jù)驅(qū)動(dòng)實(shí)現(xiàn)

對(duì)于數(shù)據(jù)驅(qū)動(dòng)的實(shí)現(xiàn),我們可以簡(jiǎn)單的通過定時(shí)器來實(shí)現(xiàn)這個(gè)功能,定時(shí)器定時(shí)監(jiān)控對(duì)象數(shù)據(jù),定時(shí)器監(jiān)控?cái)?shù)據(jù)變化,確定是否更新界面

a = 1;
  function renderDom(){
    document.getElementById('app').innerHTML = '數(shù)據(jù)是' + a;
  }
  
  function watcher(method){
    var b = a;
    method.apply();
     return setInterval(function(){
      if(b != a){
        method.apply();
        b = a;
      }
    }, 1000)
  }
  watcher(renderDom);

當(dāng)然vuejs不可能是這樣簡(jiǎn)單暴力的實(shí)現(xiàn)方式,vuejs是通過在實(shí)現(xiàn)一個(gè)觀察者來實(shí)現(xiàn)的數(shù)據(jù)驅(qū)動(dòng)。

首先,vuejs在實(shí)例化的過程中,會(huì)對(duì)遍歷傳給實(shí)例化對(duì)象選項(xiàng)中的data 選項(xiàng),遍歷其所有屬性并使用 Object.defineProperty把這些屬性全部轉(zhuǎn)為 getter/setter。

同時(shí)每一個(gè)實(shí)例對(duì)象都有一個(gè)watcher實(shí)例對(duì)象,他會(huì)在模板編譯的過程中,用getter去訪問data的屬性,watcher此時(shí)就會(huì)把用到的data屬性記為依賴,這樣就建立了視圖與數(shù)據(jù)之間的聯(lián)系。當(dāng)之后我們渲染視圖的數(shù)據(jù)依賴發(fā)生改變(即數(shù)據(jù)的setter被調(diào)用)的時(shí)候,watcher會(huì)對(duì)比前后兩個(gè)的數(shù)值是否發(fā)生變化,然后確定是否通知視圖進(jìn)行重新渲染。

這樣就實(shí)現(xiàn)了所謂的數(shù)據(jù)對(duì)于視圖的驅(qū)動(dòng)。

關(guān)于代碼的實(shí)現(xiàn),可以參考一下這篇文章 實(shí)現(xiàn)vue2.0響應(yīng)式的基本思路

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue在body和query中如何向后端傳參

    vue在body和query中如何向后端傳參

    這篇文章主要介紹了vue在body和query中如何向后端傳參,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue自定義插件封裝,實(shí)現(xiàn)簡(jiǎn)易的elementUi的Message和MessageBox的示例

    vue自定義插件封裝,實(shí)現(xiàn)簡(jiǎn)易的elementUi的Message和MessageBox的示例

    這篇文章主要介紹了vue自定義插件封裝,實(shí)現(xiàn)簡(jiǎn)易的elementUi的Message和MessageBox的示例,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-11-11
  • 詳解Vue2?watch監(jiān)聽props的值

    詳解Vue2?watch監(jiān)聽props的值

    再次遇到監(jiān)聽子組件收到父組件傳過來的值,如果這個(gè)值變化,頁面中的值發(fā)現(xiàn)是不會(huì)跟著同步變化的,本文給大家介紹Vue2?watch監(jiān)聽props的值,感興趣的朋友一起看看吧
    2023-12-12
  • vue 處理跨域問題及解決方法小結(jié)

    vue 處理跨域問題及解決方法小結(jié)

    跨域問題的出現(xiàn)是因?yàn)闉g覽器的同源策略問題,如果沒有同源策略我們的瀏覽器將會(huì)十分的不安全,隨時(shí)都可能受到攻擊,今天小編通過本文給大家介紹下vue 處理跨域問題,感興趣的朋友一起看看吧
    2021-09-09
  • Element-ui upload上傳文件限制的解決方法

    Element-ui upload上傳文件限制的解決方法

    這篇文章主要介紹了Element-ui upload上傳文件限制的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • vue函數(shù)@click.prevent的使用解析

    vue函數(shù)@click.prevent的使用解析

    這篇文章主要介紹了vue函數(shù)@click.prevent的使用解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue項(xiàng)目中main.js的用法

    vue項(xiàng)目中main.js的用法

    src/main.js是入口文件,主要作用是初始化vue實(shí)例并使用需要的插件, Vue.use()的作用就是讓它里面被注冊(cè)的組件能夠被全局使用,本文通過實(shí)例代碼介紹vue項(xiàng)目中main.js的用法,感興趣的朋友一起看看吧
    2023-10-10
  • vue.js數(shù)據(jù)加載完成前顯示原代碼{{代碼}}問題及解決

    vue.js數(shù)據(jù)加載完成前顯示原代碼{{代碼}}問題及解決

    這篇文章主要介紹了vue.js數(shù)據(jù)加載完成前顯示原代碼{{代碼}}問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 詳解vue-cli中的ESlint配置文件eslintrc.js

    詳解vue-cli中的ESlint配置文件eslintrc.js

    本篇文章主要介紹了vue-cli中的ESlint配置文件eslintrc.js詳解 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • vuex的簡(jiǎn)單使用教程

    vuex的簡(jiǎn)單使用教程

    vuex是一個(gè)專門為vue.js設(shè)計(jì)的集中式狀態(tài)管理架構(gòu)。這篇文章主要介紹了vuex的簡(jiǎn)單使用,需要的朋友可以參考下
    2018-02-02

最新評(píng)論

金湖县| 高邮市| 乡城县| 耿马| 延寿县| 合肥市| 黑河市| 阿鲁科尔沁旗| 五常市| 拉萨市| 永和县| 花莲县| 泸溪县| 宣汉县| 福清市| 从江县| 耿马| 社会| 呼伦贝尔市| 嘉善县| 巨野县| 青神县| 嘉峪关市| 乐平市| 张家川| 汉源县| 郑州市| 汽车| 广西| 桑植县| 托克逊县| 宾川县| 即墨市| 新昌县| 通江县| 鹿泉市| 宜章县| 盐边县| 体育| 古田县| 黎川县|