站長資訊網
        最全最豐富的資訊網站

        vue中mvvm和mvc的區別是什么

        區別:1、mvvm各部分的通信是雙向的,而mvc各部分通信是單向的。2、MVVM實現了view與model的自動同步,也就是model屬性改變時,不需要手動操作dom元素去改變view的顯示,而是改變屬性后該屬性對應的view層會自動改變。

        vue中mvvm和mvc的區別是什么

        本教程操作環境:windows7系統、vue2.9.6版,DELL G3電腦。

        VUE是基于MVVM的設計模式開發的,今天說一下MVC和MVVM的區別。

        MVC:

        m:model數據模型層 v:view視圖層 c:controller控制器

        原理:c層需要控制model層的數據在view層進行顯示

        MVC兩種方式,圖片說明:

        vue中mvvm和mvc的區別是什么vue中mvvm和mvc的區別是什么

        代碼實例:

        我們做一個很簡單的p顯示隱藏的效果,點擊toggle可以切換下面p顯示隱藏

        vue中mvvm和mvc的區別是什么

        html:

        <div id="box">         <button class="btn">toggle</button>         <button class="btn2">big</button>         <div class="box">           </div>     </div>

        JS:

        下面是我們不用設計模式寫的JS,這種寫法不利于維護,純粹的面向過程去寫代碼:

                let btn = document.getElementsByClassName("btn")[0];         let boxDom = document.getElementsByClassName("box")[0];         let flag = true;         btn.onclick = function(){             if(flag){                 boxDom.style.display = "none";                 flag = false;             }else{                 boxDom.style.display = "block";                 flag = true;             }         }

        MVC的寫法:

                 //view         let boxDom = document.getElementsByClassName("box")[0];         //model         let model = {             isShow:true,             isBig:false         }           //controller 業務邏輯         function Controller(){             this.init();//初始化         }         Controller.prototype = {             constructor:Controller,             init:function(){                 this.addEvent()             },             addEvent:function(){                 let btn = document.getElementsByClassName("btn")[0];                 let btn2 = document.getElementsByClassName("btn2")[0];                 let that = this;                 btn.onclick = function(){                     model.isShow = !model.isShow;                     //更改視圖了                     that.render();                 }                 btn2.onclick = function(){                     model.isBig = true;                     //更改視圖了                     that.render();                 }             },             render:function(){//數據驅動視圖的更改                 boxDom.style.display = model.isShow?"block":"none";                 boxDom.style.width = model.isBig?"300px":"100px";             }         }           new Controller();//初始化一下

        雖然MVC代碼比較長,不過以后用起來很方便,只要是相同的效果拿過來用就行

        下面說一下MVVM

        MVVM:

        m:model數據模型層 v:view視圖層 vm:ViewModel

        vue中采用的是mvvm模式,這是從mvc衍生過來的

        MVVM讓視圖與viewmodel直接的關系特別的緊密,就是為了解決mvc反饋不及時的問題

        圖片說明一下:

        vue中mvvm和mvc的區別是什么

        說到MVVM就要說一下雙向綁定和數據劫持的原理,

        1、雙向綁定的原理是什么?

        (當視圖改變的時候更新模型層,當模型層改變的時候更新視圖層)

        vue中采用了數據劫持&訂閱發布模式:

        vue在創建vm的時候,會將數據配置在實例當中,然后會使用Object.defineProperty對這些數據進行處理,為這些數據添加getter與setter方法。當獲取數據的時候,會觸發對應的getter方法,當設置數據的時候,會觸發對應的setter方法,從而進一步觸發vm上的watcher方法,然后數據了,vm進一步去更新視圖。

        2、 數據劫持:

        vue.js 則是采用數據劫持結合發布者-訂閱者模式,通過Object.defineProperty()來劫持各個屬性的setter,getter。在數據變動時發布消息給訂閱者,觸發響應的監聽回調。

        Object.defineProperty代碼實例:

        //Object.defineProperty  因為使用了ES5的很多特性          let _data = {}         let middle = 111;         Object.defineProperty(_data,"msg",{             get(){                 return middle;             },             set(val){                middle = val;             }         });           console.log(_data.msg);//獲取數據的時候,會調用對應對象屬性的getter方法         _data.msg = 222;//設置數據的時候,會調用對應對象屬性的setter方法         console.log(_data.msg);

        總結:

        mvvm與mvc最大的區別:

        MVVM實現了view與model的自動同步,也就是model屬性改變的時候, 我們不需要再自己手動操作dom元素去改變view的顯示,而是改變屬性后該屬性對應的view層會自動改變。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 色一乱一伦一图一区二区精品| 国产精品多p对白交换绿帽| 亚洲欧洲成人精品香蕉网| 93精91精品国产综合久久香蕉 | 亚洲AV无码精品色午夜果冻不卡| 99久久精品九九亚洲精品| 国产精品国产亚洲精品看不卡| 亚洲国产精品无码久久青草| 国产精品亚洲视频| 亚洲精品线在线观看| 国产精品福利网站导航| 久久99精品久久只有精品 | 久久久久久青草大香综合精品| 亚洲无删减国产精品一区| 2021国产精品视频| 国产精品高清一区二区三区| 精品无码一区在线观看| 无码日韩精品一区二区免费| 亚洲精品国偷自产在线| 亚洲午夜福利精品无码| 午夜精品久久久久久久无码| 日本精品自产拍在线观看中文| 国产一区麻豆剧传媒果冻精品| 国产成人精品久久综合| 国产vA免费精品高清在线观看| 亚洲精品综合一二三区在线| 亚洲第一精品福利| 日韩精品一区二区三区四区| 久久99久久99小草精品免视看| 国产精品久久久久久久久| 华人在线精品免费观看| 精品视频一区二区三区免费| 精品国产综合成人亚洲区| 欧美精品免费观看二区| 亚洲国产成人久久精品影视 | 精品人妻无码一区二区色欲产成人| 无码日韩精品一区二区免费暖暖| 亚洲高清国产AV拍精品青青草原 | 久久精品国产99久久丝袜| 人人妻人人澡人人爽精品欧美| 亚洲精品成人片在线观看|