2 回答

TA貢獻(xiàn)1884條經(jīng)驗 獲得超4個贊
首先題主需要了解MVVM模式是什么,是有MVC模式演變過來的,MVC模式是什么勒?Model(模型層)、View(視圖層)、Controller(控制器),每一層都有自己的功能,比如模型層用來進(jìn)行實體類的初始化,視圖層用來進(jìn)行數(shù)據(jù)的展示,控制器用來處理邏輯。那為什么有了MVC模式,還需要MVVM模式勒?先來一張圖看看MVC各層之間的關(guān)系:
可以看出,其實MVC模式中,各層之間是有耦合的,我們可能都聽過在框架設(shè)計或者編寫代碼的時候有聽過這樣一句話“低耦合、高內(nèi)聚”,其中低耦合就是為了就低各層之間的耦合度,使得每一層復(fù)雜的功能更加的明確,而MVC模式的一個問題所在就是可能會產(chǎn)生高耦合,設(shè)計模式中的有說過“關(guān)閉原則”,也就是說對修改關(guān)閉,對擴(kuò)展開放。而高耦合則就違背了這一原則,可能導(dǎo)致你在修改某一層的代碼的時候,其他層的代碼也需要進(jìn)行修改,這樣會造成后期整個項目的維護(hù)和擴(kuò)展帶來很大的麻煩,這時候就出現(xiàn)了MVP、MVVM等的模式,都是由MVC模式進(jìn)行演變而來的。那么我們知道VueJs是基于MVVM模式的,MVVM(Model、View VM),也就是模型層,視圖層,VM(相當(dāng)于Controller層)。這時候模型層與視圖層之間的聯(lián)系是通過VM層來建立的。舉個例子,從后臺獲取商品數(shù)據(jù)變進(jìn)行展示。那么我們在Vue實例的data屬性中定義的如:
data(){ return{ goods:[] }}
就相當(dāng)于Model層,View層就很好理解了,也就是我們的界面了。在從后臺獲取商品數(shù)據(jù),比如:
getGoodsInfo(){ axios.get("/api/goods").then((res)=>{ this.goods = res.goods; },(err)=>{ }) }
上面的代碼就相當(dāng)于VM層,對goods進(jìn)行了賦值處理,咱們通過Vue中的語法,通過v-for將商品數(shù)據(jù)在界面上進(jìn)行了展示。
先寫到這里吧,先去吃個飯。
添加回答
舉報