Vue中的MVVM模式使用及說明
MVVM模式
簡介
? MVVM旨在利用WPF中的數(shù)據(jù)綁定函數(shù),通過從視圖層中幾乎刪除所有GUI代碼(代碼隱藏),更好地促進視圖層開發(fā)與模式其余部分的分離。
不需要用戶體驗(UX)開發(fā)人員編寫GUI代碼,他們可以使用框架標記語言(如XAML),并創(chuàng)建到應(yīng)用程序開發(fā)人員編寫和維護的視圖模型的數(shù)據(jù)綁定。
角色的分離使得交互設(shè)計師可以專注于用戶體驗需求,而不是對業(yè)務(wù)邏輯進行編程。
這樣,應(yīng)用程序的層次可以在多個工作流中進行開發(fā)以提高生產(chǎn)力。即使一個開發(fā)人員在整個代碼庫上工作,視圖與模型的適當分離也會更加高效,因為基于最終用戶反饋,用戶界面通常在開發(fā)周期中經(jīng)常發(fā)生變化,而且處于開發(fā)周期后期。
MVVM模式試圖獲得MVC提供的功能性開發(fā)分離的兩個優(yōu)點,同時利用數(shù)據(jù)綁定的優(yōu)勢和通過綁定數(shù)據(jù)的框架盡可能接近純應(yīng)用程序模型。
它使用綁定器、視圖模型和任何業(yè)務(wù)層的數(shù)據(jù)檢查功能來驗證傳入的數(shù)據(jù)。
結(jié)果是模型和框架驅(qū)動盡可能多的操作,消除或最小化直接操縱視圖的應(yīng)用程序邏輯(如代碼隱藏)。
MVVM
- M (model):模型對象:指的是構(gòu)成界面內(nèi)容的相關(guān)數(shù)據(jù)
- V(view): view: 視圖對象:指的是給用戶或者開發(fā)者展示數(shù)據(jù)的界面
- VM(viewmodel): 視圖模型對象:是view與model之間的橋梁
MVVM模式的組成部分
- 模型
模型是指代表真實狀態(tài)內(nèi)容的領(lǐng)域模型(面向?qū)ο螅?,或指代表?nèi)容的數(shù)據(jù)訪問層(以數(shù)據(jù)為中心)。
- 視圖
就像在MVC和MVP模式中一樣,視圖是用戶在屏幕上看到的結(jié)構(gòu)、布局和外觀(UI)。
- 視圖模型
視圖模型是暴露公共屬性和命令的視圖的抽象。
MVVM沒有MVC模式的控制器,也沒有MVP模式的presenter,有的是一個綁定器。
在視圖模型中,綁定器在視圖和數(shù)據(jù)綁定器之間進行通信。
- 綁定器
聲明性數(shù)據(jù)和命令綁定隱含在MVVM模式中。在Microsoft解決方案堆中,綁定器是一種名為XAML的標記語言。
綁定器使開發(fā)人員免于被迫編寫樣板式邏輯來同步視圖模型和視圖。
在微軟的堆之外實現(xiàn)時,聲明性數(shù)據(jù)綁定技術(shù)的出現(xiàn)是實現(xiàn)該模式的一個關(guān)鍵因素。
Vue.js的核心ViewModel
ViewModel是Vue.js的核心,它是一個Vue實例。
Vue實例是作用于某一個HTML元素上的,這個元素可以是HTML的body元素,也可以是指定了id的某個元素。
創(chuàng)建了ViewModel后的雙向綁定達成
首先,我們將上圖中的DOM Listeners和Data Bindings看作兩個工具,它們是實現(xiàn)雙向綁定的關(guān)鍵。
- 從View側(cè)看,ViewModel中的DOM Listeners工具會幫我們監(jiān)測頁面上DOM元素的變化,如果有變化,則更改Model中的數(shù)據(jù);
- 從Model側(cè)看,當我們更新Model中的數(shù)據(jù)時,Data Bindings工具會幫我們更新頁面中的DOM元素。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- div鋪滿全屏而不是縮放網(wǎng)頁 --> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- Edge 模式通知 Windows Internet Explorer 以最高級別的可用模式顯示內(nèi)容, 這實際上破壞了“鎖定”模式。即如果你有IE9的話說明你有IE789,那么就調(diào)用高版本的那個也就是IE9。 --> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>原生實現(xiàn)js實現(xiàn)M-V-VM</title> <script> /* MVVM : model 模型對象--》指的是構(gòu)成界面內(nèi)容的相關(guān)數(shù)據(jù) view 視圖對象--》指的給給用戶或者開發(fā)者展示數(shù)據(jù)的界面 viewmodel 視圖模型對象--》 指的是view與model之間的橋梁 */ let msg="Hello world!";//相當于model window.onload=function(){ let h4Dom = document.getElementById("h4Dom"); let inputDom = document.getElementById("inputDom"); h4Dom.innerHTML=msg; inputDom.value=msg; //通過對事件源的監(jiān)聽來實現(xiàn),為js對象實現(xiàn)動態(tài)事件監(jiān)聽 //input輸入事件 inputDom.addEventListener("input",function(){ msg=this.value; h4Dom.innerHTML=msg; }); } </script> </head> <body> <div> <h4 id="h4Dom"></h4> <input type="text" value="" id="inputDom"/> </div> </body> </html>
實現(xiàn)效果
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue 實現(xiàn)復制功能,不需要任何結(jié)構(gòu)內(nèi)容直接復制方式
今天小編就為大家分享一篇Vue 實現(xiàn)復制功能,不需要任何結(jié)構(gòu)內(nèi)容直接復制方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11VUE實現(xiàn)分布式醫(yī)療掛號系統(tǒng)預約掛號首頁步驟詳情
這篇文章主要為大家介紹了VUE實現(xiàn)分布式醫(yī)療掛號系統(tǒng)預約掛號首頁步驟詳情,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04說說如何在Vue.js中實現(xiàn)數(shù)字輸入組件的方法
這篇文章主要介紹了說說如何在Vue.js中實現(xiàn)數(shù)字輸入組件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01vue.js 解決v-model讓select默認選中不生效的問題
這篇文章主要介紹了vue.js 解決v-model讓select默認選中不生效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07詳解vue-cli + webpack 多頁面實例應(yīng)用
本篇文章主要介紹了詳解vue-cli + webpack 多頁面實例應(yīng)用,具有一定的參考價值,有興趣的可以了解一下2017-04-04