国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 php教程 PHP開發(fā) Vue.js 和 MVVM 的注意事項(xiàng)

Vue.js 和 MVVM 的注意事項(xiàng)

Dec 07, 2016 pm 02:34 PM
mvvm vue.js

MVVM 是Model-View-ViewModel 的縮寫,它是一種基於前端開發(fā)的架構(gòu)模式,其核心是提供對View 和View Model 的雙向資料綁定,這使得View Model的狀態(tài)變更可以自動傳遞給View,這就是所謂的資料雙向綁定。

Vue.js 是一個(gè)提供 MVVM 風(fēng)格的雙向資料綁定的 Javascript 函式庫,專注於View 層。它的核心是 MVVM 中的 VM,也就是 ViewModel。 ViewModel負(fù)責(zé)連接 View 和 Model,確保視圖和資料的一致性,這種輕量的架構(gòu)讓前端開發(fā)更有效率、方便。

為什麼會出現(xiàn) MVVM 呢?

我接觸MVVM 是在2015年,可以說2015年是MVVM 最火熱的一年,而在這之前,我所知道的就是MVC, MVC 大約是在5年前,也就是2011年的時(shí)候接觸的,那時(shí)候剛學(xué)程式語言,學(xué)的是Java,而Java 中的經(jīng)典的SSH 框架就用來建構(gòu)一個(gè)標(biāo)準(zhǔn)的MVC 架構(gòu)。說實(shí)話,MVC 架構(gòu)用了這麼多年,但始終沒有很深刻的理解,只停留在用的層面, 一直到接觸Vue.js 之後,研究了MVVM 架構(gòu)思想,然後再回頭看MVC ,才有一種豁然開朗的感覺~

MVC 即Model-View-Controller 的縮寫,就是模型-視圖-控制器, 也就是說一個(gè)標(biāo)準(zhǔn)的Web 應(yīng)用程序是由這三部分組成的:

View 用來把資料以某種方式呈現(xiàn)給使用者

Model 其實(shí)就是資料

Controller 接收並處理來自使用者的請求,並將Model 回傳給使用者

在HTML5 還未火起來的那些年,MVC 做為Web 應(yīng)用程式的最佳實(shí)務(wù)是OK的,這是因?yàn)閃eb 應(yīng)用的View 層相對來說比較簡單,前端所需的資料在後端基本上都可以處理好,View 層主要是做一下展示,那時(shí)提倡的是Controller 來處理複雜的業(yè)務(wù)邏輯,所以View 層相對來說比較輕量,就是所謂的瘦客戶端思想。

2010年到2011年,HTML5概念被熱炒,受到追捧,2012年,W3C 正式宣布HTML5規(guī)範(fàn)已正式定稿。 2013年我剛進(jìn)公司就接觸到了一個(gè)HTML5 框架Sench touch, Sench touch 是一款用來構(gòu)建移動應(yīng)用的HTML5 框架,它將前後端徹底分離,前端採用的是MVC 架構(gòu),作為一個(gè)獨(dú)立的項(xiàng)目工程來維護(hù)。

為什麼前端要工程化,要是用MVC?

相對HTML4 ,HTML5 最大的亮點(diǎn)是它為行動裝置提供了一些非常有用的功能,使得HTML5 具備了開發(fā)App的能力, HTML5開發(fā)App 最大的好處就是跨平臺、快速迭代和上線,節(jié)省人力成本和提交效率,因此許多企業(yè)開始對傳統(tǒng)的App進(jìn)行改造,逐漸用H5取代Native頁面,到2015年的時(shí)候,市面上很多App 或多或少嵌入都了H5頁面。

既然要用H5來構(gòu)建App, 那View 層所做的事,就不僅僅是簡單的數(shù)據(jù)展示了,要管理數(shù)據(jù),管理用戶操作的各種狀態(tài),還要處理移動設(shè)備上用戶各種操作行為等等。因此,前端也需要一個(gè)類似MVC的框架來管理這些複雜的邏輯,讓開發(fā)更有效率。 但此時(shí)的MVC 又稍微發(fā)了點(diǎn)變化:

View UI佈局,展示資料

Model 管理資料

Controller 響應(yīng)用戶操作,並將Model 更新至View 上

這種MVC 架構(gòu)模式對於基礎(chǔ)的應(yīng)用來看起是OK的,更是符合軟體架構(gòu)的分層思想。 但實(shí)際上,隨著H5 的不斷發(fā)展,人們更希望使用H5 開發(fā)的應(yīng)用能和Native 媲美,或接近原生App 體驗(yàn)效果,於是前端應(yīng)用的複雜程度已不同往日,今非昔比。這時(shí)前端就暴露了三個(gè)重要的痛點(diǎn)問題:

1. 開發(fā)者在程式碼中大量調(diào)用相同的 DOM API, 處理繁瑣 ,操作冗餘,使得程式碼難以維護(hù)。

2. 大量的DOM 操作使頁面渲染效能降低,載入速度變慢,影響使用者體驗(yàn)。

3. 當(dāng)Model 頻繁發(fā)生變化,開發(fā)者需要主動更新到View ;當(dāng)用戶的操作導(dǎo)致Model 發(fā)生變化,開發(fā)者同樣需要將變化的數(shù)據(jù)同步到Model 中,?
這樣的工作不僅繁瑣,而且很難維護(hù)複雜多變的資料狀態(tài)。
其實(shí),早期jquery的出現(xiàn)就是為了前端能更簡潔的操作DOM,但它只解決了第一個(gè)問題,後面的兩個(gè)問題總是伴隨著前端一直存在。

MVVM 的出現(xiàn),完美的解決了上述三個(gè)問題。

MVVM 由Model,View,ViewModel 三部分組成,Model 層代表資料模型,也可以在Model中定義資料修改和操作的業(yè)務(wù)邏輯;View 代表UI元件,它負(fù)責(zé)將資料模型轉(zhuǎn)換成UI展現(xiàn)出來,ViewModel是一個(gè)同步View 和Model的物件。

在MVVM架構(gòu)下,View 和Model 之間並沒有直接的聯(lián)繫,而是透過ViewModel進(jìn)行交互,Model和ViewModel之間的交互是雙向的, 因此View 資料的變化會同步到Model中,而Model 數(shù)據(jù)的變化也會立即反應(yīng)到View上。

ViewModel 透過雙向資料綁定把View 層和Model 層連接了起來,而View 和Model 之間的同步工作完全是自動的,無需人為干涉,因此開發(fā)者只需關(guān)注業(yè)務(wù)邏輯,不需要手動操作DOM,不需要關(guān)注資料狀態(tài)的同步問題,複雜的資料狀態(tài)維護(hù)完全由MVVM 來統(tǒng)一管理。

Vue.js 的細(xì)節(jié)

Vue.js 可以說是MVVM架構(gòu)的最佳實(shí)踐,專注於MVVM 中的ViewModel,不僅做到了資料雙向綁定,而且也是一款相對來比較輕量級的JS庫,API 簡潔,很容易上手。 Vue的基礎(chǔ)知識網(wǎng)路上有現(xiàn)成的教學(xué)課程,這裡不再贅述, 以下簡單了解Vue.js 關(guān)於雙向綁定的一些實(shí)作細(xì)節(jié):

Vue.js 採用的是Object.defineProperty 的getter和setter,並結(jié)合觀察者模式來實(shí)現(xiàn)資料綁定的。當(dāng)把一個(gè)普通 Javascript 物件傳給 Vue 實(shí)例來當(dāng)作它的 data 選項(xiàng)時(shí),Vue 會遍歷它的屬性,用 Object.defineProperty 將它們轉(zhuǎn)為 getter/setter。使用者看不到 getter/setters,但是在內(nèi)部它們讓 Vue 追蹤依賴,在屬性被存取和修改時(shí)通知變化。

Vue.js 和 MVVM 的注意事項(xiàng)

Observer 資料監(jiān)聽器,能夠?qū)Y料物件的所有屬性進(jìn)行監(jiān)聽,如有變動可拿到最新值並通知訂閱者,內(nèi)部採用Object.defineProperty的getter和setter來實(shí)現(xiàn)

Compile 指令解析器,它的作用對每個(gè)元素節(jié)點(diǎn)的指令進(jìn)行掃描和解析,根據(jù)指令模板替換數(shù)據(jù),以及綁定相應(yīng)的更新函數(shù)

Watcher 訂閱者, 作為連接Observer 和Compile 的橋樑,能夠訂閱並收到每個(gè)屬性變動的通知,執(zhí)行指令綁定的相應(yīng)回調(diào)函數(shù)

Dep 訊息訂閱器??,內(nèi)部維護(hù)了一個(gè)數(shù)組,用來收集訂閱者(Watcher),資料變動觸發(fā)notify 函數(shù),再呼叫訂閱者的update 方法

當(dāng)執(zhí)行new Vue() 時(shí),Vue 就進(jìn)入了初始化階段,一方面Vue 會遍歷data 選項(xiàng)中的屬性,並用Object.defineProperty 將它們轉(zhuǎn)為getter/setter,實(shí)現(xiàn)資料變更監(jiān)聽功能;另一方面,Vue 的指令編譯器Compile 對元素節(jié)點(diǎn)的指令進(jìn)行掃描和解析,初始化視圖,並訂閱Watcher 來更新視圖, 此時(shí)Wather會將自己加入到訊息訂閱器??中(dep),初始化完畢。

當(dāng)資料變更時(shí),Observer 中的setter方法被觸發(fā),setter 會立即呼叫Dep.notify(),Dep 開始遍歷所有的訂閱者,並呼叫訂閱者的update 方法,訂閱者收到通知後對視圖進(jìn)行對應(yīng)的更新,完成一次資料綁定。


本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP實(shí)作MVVM架構(gòu):基本原理及應(yīng)用 PHP實(shí)作MVVM架構(gòu):基本原理及應(yīng)用 Jun 18, 2023 am 08:54 AM

隨著Web應(yīng)用程式的快速發(fā)展,越來越多的開發(fā)者將目光投向了各種新興的Web開發(fā)框架和架構(gòu)設(shè)計(jì)模式。其中一個(gè)備受矚目的設(shè)計(jì)模式就是MVVM(ModelViewViewModel)架構(gòu)模式。 MVVM採用了一種現(xiàn)代化的設(shè)計(jì)模式,透過將UI和業(yè)務(wù)邏輯相分離,使得開發(fā)人員能夠更好地管理和維護(hù)應(yīng)用程式。此外,MVVM減少了不必要的耦合,提高了程式碼的可重複使用性和靈活性,

深入探討vite是怎麼解析.env檔的 深入探討vite是怎麼解析.env檔的 Jan 24, 2023 am 05:30 AM

使用vue框架開發(fā)前端專案時(shí),我們部署的時(shí)候都會部署多套環(huán)境,往往開發(fā)、測試以及線上環(huán)境呼叫的介面網(wǎng)域都是不一樣的。如何能做到區(qū)分呢?那就是使用環(huán)境變數(shù)和模式。

圖文詳解如何在Vue專案中整合Ace程式碼編輯器 圖文詳解如何在Vue專案中整合Ace程式碼編輯器 Apr 24, 2023 am 10:52 AM

Ace 是一個(gè)用 JavaScript 寫的可嵌入程式碼編輯器。它與 Sublime、Vim 和 TextMate 等原生編輯器的功能和效能相符。它可以很容易地嵌入到任何網(wǎng)頁和 JavaScript 應(yīng)用程式中。 Ace 被維護(hù)為Cloud9 IDE的主要編輯器 ,並且是 Mozilla Skywriter (Bespin) 專案的繼承者。

解析Vue2實(shí)作composition API的原理 解析Vue2實(shí)作composition API的原理 Jan 13, 2023 am 08:30 AM

自從Vue3 發(fā)布之後,composition API 這個(gè)詞走入寫Vue 同學(xué)的視野之中,相信大家也一直聽到composition API 比之前的options API 有多好多強(qiáng),如今由於@vue/composition-api 插件的發(fā)布,Vue2的同學(xué)也可以上車咯,接下來我們主要以響應(yīng)式的ref 和reactive 來深入分析一下,這個(gè)插件是怎麼實(shí)現(xiàn)此

聊聊vue3怎麼使用高德地圖api 聊聊vue3怎麼使用高德地圖api Mar 09, 2023 pm 07:22 PM

在我們使用高德地圖的時(shí)候,官方給我們推薦了很多案例,demo,但是這些案例都是使用原生方法接入,並沒有提供vue或者react 的demo,vue2的接入網(wǎng)上也很多人都有寫過,以下這篇文章就來看看vue3怎麼使用常用的高德地圖api,希望對大家有幫助!

探討如何在Vue3中撰寫單元測試 探討如何在Vue3中撰寫單元測試 Apr 25, 2023 pm 07:41 PM

在當(dāng)今前端開發(fā)中,Vue.js 已經(jīng)成為了一個(gè)非常流行的框架。隨著 Vue.js 的不斷發(fā)展,單元測試變得越來越重要。今天,我們將探討如何在 Vue.js 3 中編寫單元測試,並提供一些最佳實(shí)踐和常見的問題及解決方案。

淺析vue怎麼實(shí)現(xiàn)檔案切片上傳 淺析vue怎麼實(shí)現(xiàn)檔案切片上傳 Mar 24, 2023 pm 07:40 PM

在實(shí)際開發(fā)專案過程中有時(shí)候需要上傳比較大的文件,然後呢,上傳的時(shí)候相對來說就會慢一些,so,後臺可能會要求前端進(jìn)行文件切片上傳,很簡單哈,就是把比如說1個(gè)G的檔案流切割成若干個(gè)小的檔案流,然後分別請求介面?zhèn)鬟f這個(gè)小的檔案流。

Vue中JSX語法和模板語法的簡單比較(優(yōu)劣勢分析) Vue中JSX語法和模板語法的簡單比較(優(yōu)劣勢分析) Mar 23, 2023 pm 07:53 PM

在Vue.js中,開發(fā)人員可以使用兩種不同的語法來建立使用者介面:JSX語法和範(fàn)本語法。這兩種文法各有優(yōu)劣,以下就來探討它們的差異和優(yōu)劣勢。

See all articles