AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

淺談Vue2中MVVM的實現(xiàn)

來源: 責編: 時間:2023-11-20 08:58:18 294觀看
導讀Labs 導讀Vue.js是一款適用于構建用戶界面的漸進式JavaScript框架。它由尤雨溪在2014年推出,并迅速成為最流行的前端框架之一。Vue.js的設計目標是通過簡單、靈活的API,提供一種高效、可復用和響應式的方式來構建現(xiàn)代化

EaI28資訊網——每日最新資訊28at.com

Labs 導讀EaI28資訊網——每日最新資訊28at.com

Vue.js是一款適用于構建用戶界面的漸進式JavaScript框架。它由尤雨溪在2014年推出,并迅速成為最流行的前端框架之一。Vue.js的設計目標是通過簡單、靈活的API,提供一種高效、可復用和響應式的方式來構建現(xiàn)代化的Web應用程序。自Vue發(fā)行以來,就受到了國內外爆發(fā)式的關注,如今已經成為了最流行的前端框架之一,并且其已經具有了龐大的生態(tài)系統(tǒng)。Vue框架采用了MVVM的設計模式,本文簡單介紹Vue2中MVVM的實現(xiàn)。EaI28資訊網——每日最新資訊28at.com


EaI28資訊網——每日最新資訊28at.com

Vue.js作為一款流行的前端框架,其整體框架的設計采用了前端框架中常用的MVVM設計模式,將視圖與數據相互解耦,分離了關注點并支持雙向數據綁定,使得頁面的變化呈響應式,能夠根據數據的變化而自動更新視圖。而Vue對MVVM模型的實現(xiàn)離不開數據的雙向綁定以及虛擬DOM的頁面渲染機制。本文接下來將從Vue的MVVM模型、數據雙向綁定的實現(xiàn)以及虛擬DOM機制分別展開介紹。EaI28資訊網——每日最新資訊28at.com

Part 01、  MVVM模型  

MVVM即Model-View-ViewModel,是前端三大MV*(MVC、MVP、MVVM)模型之一,是 MVC 模型的改進版本。MVVM模型通過數據雙向綁定的方式來解耦視圖和模型,有助于從概念層面上將圖形用戶界面的開發(fā)與業(yè)務邏輯或后端邏輯的開發(fā)分離開來,從而使視圖不依賴于任何特定的模型平臺,其優(yōu)勢在于明確地分離了界面和業(yè)務邏輯,使代碼更易于維護、重用和測試。MVVM指代了三個部分,具體如下:EaI28資訊網——每日最新資訊28at.com

1.Model(模型):模型代表著應用程序中的數據和業(yè)務邏輯。在Vue.js中,模型可以是應用程序的數據對象、服務端API返回的數據,或者其他需要進行處理和展示的數據。EaI28資訊網——每日最新資訊28at.com

2.View(視圖):視圖是用戶界面的可見部分,即用戶所看到和與之交互的界面元素。在Vue.js中,視圖由模板(Template)來定義,模板是一種聲明式的HTML擴展語法,在模板中可以使用Vue的指令、插值表達式等來動態(tài)渲染數據。EaI28資訊網——每日最新資訊28at.com

3.ViewModel(視圖模型):視圖模型是連接視圖和模型的橋梁,負責處理視圖和模型之間的數據交互和邏輯控制。在Vue.js中,視圖模型由Vue實例來表示,它是一個JavaScript對象,包含了模板中所需的數據、方法和計算屬性等。EaI28資訊網——每日最新資訊28at.com

MVVM開發(fā)模式架構圖EaI28資訊網——每日最新資訊28at.com

在Vue中,上圖Controller的功能便是通過數據的雙向綁定來實現(xiàn)的,而數據引發(fā)視圖的更新則是通過虛擬DOM來實現(xiàn)的。在運用MVVM設計模式的情況下,Vue的工作原理如下:EaI28資訊網——每日最新資訊28at.com

  • 當用戶與視圖進行交互(例如點擊按鈕、輸入表單等),視圖觸發(fā)相應的事件。
  • 視圖模型監(jiān)聽這些事件,并根據業(yè)務邏輯更新模型的數據。
  • 當數據發(fā)生變化時,模型發(fā)送通知給視圖模型,視圖模型根據變化更新視圖。
  • 視圖根據最新的數據重新渲染,展示給用戶。

上述過程主要為數據更新時的執(zhí)行邏輯,這個過程在Vue整個生命周期中屬于更新階段。而Vue 的生命周期實際上就是 Vue 組件從創(chuàng)建到銷毀的整個過程,被分為了四個階段,八個鉤子函數(可以理解為事件回調函數)。分別為創(chuàng)建階段、掛載階段、更新階段、銷毀階段,MVVM中視圖與模型的初始化和數據雙向綁定則在創(chuàng)建階段的beforeCreate以及掛在階段的mounted中實現(xiàn)。EaI28資訊網——每日最新資訊28at.com

Part 02、  數據雙向綁定的實現(xiàn)  

Vue數據雙向綁定的實現(xiàn)實質上也就是MVVM中Controller的實現(xiàn)。Vue的數據雙向綁定是通過數據劫持結合發(fā)布/訂閱者的模式實現(xiàn)的,而數據劫持在Vue底層是通過Object.defineProperty()方法實現(xiàn)的。Object.defineProperty()方法是原生JS提供的一個定義對象屬性的接口,通過該方法的get和set配置項可以實現(xiàn)在一個對象中代理另一個對象的屬性變化,即getter和setter,這使得我們在訪問或修改對象的屬性時可以執(zhí)行自定義的邏輯。EaI28資訊網——每日最新資訊28at.com

在Vue中,當我們定義一個響應式數據時,Vue會將該數據轉化為一個稱為“響應式代理對象”的對象(data配置項中的屬性)。在這個代理對象中,Vue就會使用Object.defineProperty()方法為對象中所有屬性定義一個getter和setter。從而當我們訪問響應式代理對象的屬性時,Vue的getter會被觸發(fā),從而執(zhí)行一些與數據相關的邏輯,例如依賴追蹤和通知訂閱者。而當我們修改響應式代理對象的屬性時,Vue的setter會被觸發(fā),它會接收新的值并執(zhí)行一些對應的更新操作,例如觸發(fā)視圖重新渲染。這種方式稱為“劫持”或“攔截”對象的訪問和修改操作,以實現(xiàn)數據的響應式。EaI28資訊網——每日最新資訊28at.com

在Vue劫持了所有需要監(jiān)聽的所有屬性后,結合Vue的消息發(fā)布-訂閱模式,每當數據變化就會通過消息發(fā)布-訂閱模式的方式監(jiān)測到數據的變化,并重新編譯視圖以此實現(xiàn)響應式。Vue中數據雙向綁定機制如圖所示,其中Dep 是訂閱收集器。EaI28資訊網——每日最新資訊28at.com

Vue雙向綁定原理EaI28資訊網——每日最新資訊28at.com

其中,Vue的數據監(jiān)測也是通過數據劫持的方式實現(xiàn)的,但Vue只會對對象進行數據劫持為其生成setter和getter,而對于數組Vue并不會對其進行數據劫持。對于數組Vue的處理方式是監(jiān)測數組數據調用的方法,當調用了能夠改變原數組的方法時,Vue會將該方法進行二次封裝。原本這些方法只做了他們原本該做的事情,但Vue包裝過之后,還加了一件事進去,即重新解析頁面生成虛擬DOM并執(zhí)行diff算法生成新的DOM結構,交給瀏覽器進行頁面的更新渲染,以此實現(xiàn)對數組數據改變的響應。但是值得注意的是,那些不會引起原數組改變的方法以及通過數組索引直接進行修改而沒有調用任何方法的情況,Vue并不會監(jiān)測到,因此也不會出現(xiàn)響應式的效果。EaI28資訊網——每日最新資訊28at.com

Part 03、 虛擬DOM機制 

Vue的虛擬DOM是一種在內存中維護的輕量級DOM樹,在頁面初始渲染時生成,虛擬DOM機制的原理如下:EaI28資訊網——每日最新資訊28at.com

1)生成虛擬DOM:當Vue組件首次渲染時,會生成一個虛擬DOM樹,稱為初始虛擬 DOM。這棵樹的結構與實際的DOM結構相似,但是只是在內存中存在,并沒有直接渲染到頁面上。EaI28資訊網——每日最新資訊28at.com

2)更新虛擬DOM:當組件的狀態(tài)發(fā)生變化時,Vue 會生成一個新的虛擬DOM樹,稱為更新虛擬DOM。該樹與初始虛擬DOM相比,只有發(fā)生變化的部分會被重新創(chuàng)建,其余部分則會被復用。EaI28資訊網——每日最新資訊28at.com

3)對比并計算差異:Vue會對比初始虛擬DOM和更新虛擬DOM,找出兩棵樹之間的差異。這個過程稱為虛擬DOM的diff算法。通過這個算法,Vue可以高效地找出需要進行修改、添加或移除的節(jié)點。EaI28資訊網——每日最新資訊28at.com

4)批量更新真實DOM:根據差異的計算結果,Vue會將需要進行修改的部分同步到實際的DOM中。由于虛擬DOM是在內存中操作的,因此可以通過批量更新的方式,將多個DOM修改操作合并為一個,從而減少實際的DOM操作,提高性能。EaI28資訊網——每日最新資訊28at.com

虛擬DOM原理EaI28資訊網——每日最新資訊28at.com

在常規(guī)的直接操作實際DOM的方式下,頁面數據的每次改變都會引發(fā)瀏覽器重新計算和渲染整個DOM樹。這種操作會涉及到大量的DOM訪問和修改,而這些操作通常是相對較慢的,尤其在涉及復雜的頁面結構和大量的DOM元素時。在數據發(fā)生改變需要重新解析頁面結構的時候,Vue并不是直接將解析的頁面結構直接交給瀏覽器渲染,而是先根據虛擬DOM采用Diff算法計算出DOM中更新的部分,然后只交給瀏覽器更新的部分去渲染,從而減少瀏覽器對DOM的操作和頁面的重排重構,提高瀏覽器解析頁面的性能。所以本質上來說,虛擬DOM是利用了JS代碼的運行速度來減負了瀏覽器更新DOM的消耗。EaI28資訊網——每日最新資訊28at.com

Part 04、  總結 

在Vue中,MVVM的實現(xiàn)主要是通過數據雙向綁定以及虛擬DOM實現(xiàn)的,在Vue中的具體實現(xiàn)則是通過Vue實例來完成的。在Vue實例的生命周期中,在創(chuàng)建階段生成Vue實例完成ViewModel的初始化;在掛載階段使用Object.defineProperty()方法來劫持和觀察數據對象的屬性訪問和修改,完成數據與視圖的數據雙向綁定;在更新階段應用虛擬DOM+Diff算法來高效地確定需要進行修改、添加或刪除的節(jié)點并將更新的節(jié)點交給瀏覽器渲染,而不是直接操作實際的DOM,提高了渲染效率。需要注意的是,在Vue中,虛擬DOM主要用于優(yōu)化渲染性能,而非作為實現(xiàn)MVVM的核心機制。數據的雙向綁定才是MVVM模型的主要實現(xiàn)方式,虛擬DOM則是為了提高性能而引入的輔助手段。這樣,通過Vue實例作為ViewModel,開發(fā)者能夠更方便地管理和操作應用的界面和數據,實現(xiàn)了視圖和數據模型之間的雙向綁定,使代碼更具可讀性和可維護性。EaI28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-31016-0.html淺談Vue2中MVVM的實現(xiàn)

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 快速創(chuàng)建高效REST API的十個要點解析

下一篇: 菜鳥聯(lián)手東風本田,提速汽車供應鏈數智化

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • K60至尊版剛預熱 一加Ace2 Pro正面硬剛

    Redmi這邊剛如火如荼的宣傳了K60 Ultra的各種技術和硬件配置,作為競品的一加也坐不住了。一加中國區(qū)總裁李杰發(fā)布了兩條微博,表示在自家的一加Ace2上早就已經采用了和PixelWo
  • 官方承諾:K60至尊版將會首批升級MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版將會搭載天璣9200+處理器和獨顯芯片X7的同時,Redmi給出了官方承諾,K60至尊重大更新首批升級,會首批推送MIUI 15。也就是說雖然
  • 6月iOS設備性能榜:M2穩(wěn)居榜首 A系列只能等一手3nm來救

    沒有新品發(fā)布,自然iOS設備性能榜的上榜設備就沒有什么更替,僅僅只有跑分變化而產生的排名變動,畢竟蘋果新品的發(fā)布節(jié)奏就是這樣的,一年下來也就幾個移動端新品,不會像安卓廠商,一
  • 摸魚心法第一章——和配置文件說拜拜

    為了能摸魚我們團隊做了容器化,但是帶來的問題是服務配置文件很麻煩,然后大家在群里進行了“親切友好”的溝通圖片圖片圖片圖片對比就對比,簡單對比下獨立配置中心和k8s作為配
  • 掘力計劃第 20 期:Flutter 混合開發(fā)的混亂之治

    在掘力計劃系列活動第20場,《Flutter 開發(fā)實戰(zhàn)詳解》作者,掘金優(yōu)秀作者,Github GSY 系列目負責人戀貓的小郭分享了Flutter 混合開發(fā)的混亂之治。Flutter 基于自研的 Skia 引擎
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動設備上有一個固定元素,當激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發(fā)生
  • Python異步IO編程的進程/線程通信實現(xiàn)

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現(xiàn)方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
Top