亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

前端 Vue.js 和 MVVM 詳細介紹

2024-09-01 13:49:55
字體:
來源:轉載
供稿:網友

MVVM 是Model-View-ViewModel 的縮寫,它是一種基于前端開發的架構模式,其核心是提供對View 和 ViewModel 的雙向數據綁定,這使得ViewModel 的狀態改變可以自動傳遞給 View,即所謂的數據雙向綁定。

Vue.js 是一個提供了 MVVM 風格的雙向數據綁定的 JavaScript 庫,專注于View 層。它的核心是 MVVM 中的 VM,也就是 ViewModel。 ViewModel負責連接 View 和 Model,保證視圖和數據的一致性,這種輕量級的架構讓前端開發更加高效、便捷。 

為什么會出現 MVVM 呢?

我接觸MVVM 是在2015年,可以說2015年是MVVM 最火熱的一年,而在這之前,我所知道的就是MVC,  MVC 大約是在5年前,也就是2011年的時候接觸的,那時候剛學編程語言,學的Java,而Java 中經典的 SSH 框架就用來構建一個標準的MVC 框架。說實話,MVC 用了這么多年,但始終沒有很深刻的理解,只停留在用的層面, 一直到接觸 Vue.js 之后,研究了MVVM 架構思想,然后再回頭看 MVC ,才有一種豁然開朗的感覺~

MVC 即 Model-View-Controller 的縮寫,就是 模型-視圖-控制器 , 也就是說一個標準的Web 應用程式是由這三部分組成的:

  1. View 用來把數據以某種方式呈現給用戶。
  2. Model 其實就是數據。
  3. Controller 接收并處理來自用戶的請求,并將 Model 返回給用戶。

在HTML5 還未火起來的那些年,MVC 作為Web 應用的最佳實踐是OK 的,這是因為 Web 應用的View 層相對來說比較簡單,前端所需要的數據在后端基本上都可以處理好,View 層主要是做一下展示,那時候提倡的是 Controller 來處理復雜的業務邏輯,所以View 層相對來說比較輕量,就是所謂的瘦客戶端思想。

2010年到2011年,Html5概念被熱炒,受到追捧,2012年,W3C 正式宣布HTML5規范已經正式定稿。2013年我剛進公司就接觸了第一個 HTML5 框架 Sench touch, 它是一款用來構建移動應用的HTML5 框架,它將前后端徹底分離,前端采用MVC 架構,作為一個獨立的項目工程來維護。

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

相對 HTML4 , HTML5 最大的亮點是它為移動設備提供了一些非常有用的功能,使得 HTML5 具備了開發App的能力, HTML5開發App 最大的好處就是跨平臺、快速迭代和上線,節省人力成本和提高效率,因此很多企業開始對傳統的App進行改造,逐漸用H5代替Native,到2015年的時候,市面上大多數App 或多或少嵌入都了H5 的頁面。

既然要用H5 來構建 App, 那View 層所做的事,就不僅僅是簡單的數據展示了,它不僅要管理復雜的數據狀態,還要處理移動設備上各種操作行為等等。因此,前端也需要工程化,也需要一個類似于MVC 的框架來管理這些復雜的邏輯,使開發更加高效。 但這里的 MVC 又稍微發了點變化:

  1. View UI布局,展示數據。
  2. Model 管理數據。
  3. Controller 響應用戶操作,并將 Model 更新到 View 上。

這種 MVC 架構模式對于簡單的應用來看起是OK 的,也符合軟件架構的分層思想。 但實際上,隨著H5 的不斷發展,人們更希望使用H5 開發的應用能和Native 媲美,或者接近于原生App 的體驗效果,于是前端應用的復雜程度已不同往日,今非昔比。這時前端開發就暴露出了三個痛點問題:

1、開發者在代碼中大量調用相同的 DOM API, 處理繁瑣 ,操作冗余,使得代碼難以維護。

2、大量的DOM 操作使頁面渲染性能降低,加載速度變慢,影響用戶體驗。

3、當 Model 頻繁發生變化,開發者需要主動更新到View ;當用戶的操作導致 Model 發生變化,開發者同樣需要將變化的數據

同步到Model 中,這樣的工作不僅繁瑣,而且很難維護復雜多變的數據狀態。
其實,早期jQuery 的出現就是為了前端能更簡潔的操作DOM 而設計的,但它只解決了第一個問題,另外兩個問題始終伴隨著前端一直存在。

MVVM 的出現,完美解決了以上三個問題

MVVM 由 Model,View,ViewModel 三部分構成,Model 層代表數據模型,也可以在Model中定義數據修改和操作的業務邏輯;View 代表UI 組件,它負責將數據模型轉化成UI 展現出來,ViewModel 是一個同步View 和 Model的對象。

在MVVM架構下,View 和 Model 之間并沒有直接的聯系,而是通過ViewModel進行交互,Model 和 ViewModel 之間的交互是雙向的, 因此View 數據的變化會同步到Model中,而Model 數據的變化也會立即反應到View 上。

ViewModel 通過雙向數據綁定把 View 層和 Model 層連接了起來,而View 和 Model 之間的同步工作完全是自動的,無需人為干涉,因此開發者只需關注業務邏輯,不需要手動操作DOM, 不需要關注數據狀態的同步問題,復雜的數據狀態維護完全由 MVVM 來統一管理。

Vue.js 的細節

Vue.js 可以說是MVVM 架構的最佳實踐,專注于 MVVM 中的 ViewModel,不僅做到了數據雙向綁定,而且也是一款相對來比較輕量級的JS 庫,API 簡潔,很容易上手。Vue的基礎知識網上有現成的教程,此處不再贅述, 下面簡單了解一下 Vue.js 關于雙向綁定的一些實現細節:

Vue.js 是采用 Object.defineProperty 的 getter 和 setter,并結合觀察者模式來實現數據綁定的。當把一個普通 Javascript 對象傳給 Vue 實例來作為它的 data 選項時,Vue 將遍歷它的屬性,用 Object.defineProperty 將它們轉為 getter/setter。用戶看不到 getter/setter,但是在內部它們讓 Vue 追蹤依賴,在屬性被訪問和修改時通知變化。

  1. Observer 數據監聽器,能夠對數據對象的所有屬性進行監聽,如有變動可拿到最新值并通知訂閱者,內部采用Object.defineProperty的getter和setter來實現。
  2. Compile 指令解析器,它的作用對每個元素節點的指令進行掃描和解析,根據指令模板替換數據,以及綁定相應的更新函數。
  3. Watcher 訂閱者, 作為連接 Observer 和 Compile 的橋梁,能夠訂閱并收到每個屬性變動的通知,執行指令綁定的相應回調函數。
  4. Dep 消息訂閱器,內部維護了一個數組,用來收集訂閱者(Watcher),數據變動觸發notify 函數,再調用訂閱者的 update 方法。

從圖中可以看出,當執行 new Vue() 時,Vue 就進入了初始化階段,一方面Vue 會遍歷 data 選項中的屬性,并用 Object.defineProperty 將它們轉為 getter/setter,實現數據變化監聽功能;另一方面,Vue 的指令編譯器Compile 對元素節點的指令進行掃描和解析,初始化視圖,并訂閱Watcher 來更新視圖, 此時Wather 會將自己添加到消息訂閱器中(Dep),初始化完畢。

當數據發生變化時,Observer 中的 setter 方法被觸發,setter 會立即調用Dep.notify(),Dep 開始遍歷所有的訂閱者,并調用訂閱者的 update 方法,訂閱者收到通知后對視圖進行相應的更新。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情videos| 神马久久久久久| 国产一区二区三区在线播放免费观看| 这里只有精品在线播放| 亚洲在线观看视频网站| 一道本无吗dⅴd在线播放一区| 日韩最新av在线| 亚洲第一视频网站| 日韩视频免费中文字幕| 亚洲成人av片在线观看| 国产精品露脸av在线| 精品毛片三在线观看| 久久久人成影片一区二区三区| 国产精品电影一区| 欧美日韩亚洲一区二区三区| 成人免费在线网址| 亚洲a在线播放| 精品久久久久人成| 97色在线播放视频| 国产精品91在线观看| 久久中文精品视频| 日韩视频―中文字幕| 久久99视频精品| 亚洲第一在线视频| 国产日本欧美视频| 欧美第一黄网免费网站| 国产精品美女免费视频| 最新国产成人av网站网址麻豆| 欧美最顶级丰满的aⅴ艳星| 国产精品va在线播放| 国产精品丝袜久久久久久高清| 日韩电影中文 亚洲精品乱码| 欧美精品在线观看| 久久久久久亚洲精品中文字幕| 亚洲男人的天堂在线| 午夜精品一区二区三区在线视| 成人激情视频在线播放| 91牛牛免费视频| 亚洲经典中文字幕| 日韩综合中文字幕| 欧美激情高清视频| 最近2019中文字幕一页二页| 97精品国产aⅴ7777| 欧美亚洲在线播放| 成人乱人伦精品视频在线观看| 国产精品99久久99久久久二8| 亚洲精品成人网| 欧美激情亚洲激情| 亚洲国语精品自产拍在线观看| 欧美午夜宅男影院在线观看| 日韩精品中文字| www.国产精品一二区| 欧美日韩国产中文精品字幕自在自线| 国产精品吴梦梦| 精品日本美女福利在线观看| 51精品在线观看| 中文.日本.精品| 在线视频欧美日韩精品| 久久亚洲精品一区二区| 成人做爰www免费看视频网站| 亚洲视频日韩精品| 亚洲激情成人网| 欧美性极品xxxx娇小| 精品国偷自产在线视频| 欧美精品激情blacked18| 国产精品都在这里| 亚洲色图50p| 日韩欧美中文字幕在线播放| xxxx欧美18另类的高清| 97在线看免费观看视频在线观看| 92国产精品久久久久首页| 久久偷看各类女兵18女厕嘘嘘| 欧美极品在线视频| 日韩av最新在线| 国产亚洲aⅴaaaaaa毛片| 亚洲精品成人久久电影| 日本中文字幕久久看| 久久福利视频网| 色综合久久88色综合天天看泰| 亚洲欧美日韩精品久久奇米色影视| 91麻豆国产语对白在线观看| 中文字幕欧美国内| 日韩精品久久久久久福利| 亚洲日韩欧美视频一区| 日韩av黄色在线观看| 国产精品美腿一区在线看| 国产一区二区日韩精品欧美精品| 亚洲国产成人精品女人久久久| 久久久国产在线视频| 成人乱色短篇合集| 色狠狠久久aa北条麻妃| 国产香蕉一区二区三区在线视频| 亚洲精品国产精品自产a区红杏吧| 久久精品美女视频网站| 国产成人短视频| 精品国产一区二区在线| 国产精品久久久久77777| 91av在线影院| 国产日韩在线看片| 一区二区三区美女xx视频| 欧美人成在线视频| 一个人www欧美| 福利视频一区二区| 色吧影院999| 亚洲影院污污.| 国产日韩欧美影视| 久久精品99国产精品酒店日本| 日韩欧美在线观看视频| 国产精品日韩欧美大师| 北条麻妃久久精品| 国产精品户外野外| 日本高清+成人网在线观看| 欧美日韩爱爱视频| 国产欧美日韩精品丝袜高跟鞋| 最近2019中文字幕mv免费看| 欧美日韩午夜视频在线观看| 中文字幕精品久久久久| 欧美日韩视频免费播放| 久久成人人人人精品欧| 久久手机免费视频| 亚洲国产女人aaa毛片在线| 97碰碰碰免费色视频| 欧美尺度大的性做爰视频| 一夜七次郎国产精品亚洲| 亚洲va欧美va国产综合剧情| 91九色蝌蚪国产| 日韩av不卡电影| 国产大片精品免费永久看nba| 97人人爽人人喊人人模波多| 揄拍成人国产精品视频| 国产精品入口免费视频一| 国产一区二区三区18| 亚洲精品一区二区在线| 国产欧美韩国高清| 国产精品视频一区二区高潮| 激情久久av一区av二区av三区| 日韩成人中文字幕| 97国产真实伦对白精彩视频8| 最近日韩中文字幕中文| 精品欧美国产一区二区三区| 久久躁狠狠躁夜夜爽| 欧美日韩国产色| 91av视频在线观看| 精品久久久一区| 97国产精品免费视频| 91社影院在线观看| 97精品一区二区三区| 日韩欧美在线网址| 成年无码av片在线| 亚洲第一中文字幕在线观看| 性色av一区二区三区在线观看| 国产精品va在线播放| 97人人爽人人喊人人模波多| 日韩在线观看av| 欧美日韩国产在线播放| 亚洲欧美制服另类日韩| 国产丝袜一区二区三区| 亚洲精品一区二区三区不| 欧美亚洲视频一区二区| 日韩欧美中文字幕在线播放| 亚洲国模精品私拍| 国产精品视频专区| 亚洲精品国产精品国自产观看浪潮| 日韩视频亚洲视频|