【vue】vue中數據雙向綁定原理/響應式原理,mvvm,mvc、mvp分別是什么

關于 vue 的原理主要有兩個重要內容,分別是 mvvm 數據雙向綁定原理,和 響應式原理

  1. MVC(Model-View-Controller)

    • Model(模型):表示應用程序的數據和業務邏輯。
    • View(視圖):負責展示數據給用戶,并且接受用戶的輸入。
    • Controller(控制器):負責處理用戶的輸入和操作,當用戶與頁面產生交互的時候開始工作,然后調用model 層修改model
    • view 和 model 應用了觀察者模式,當 model 層發生改變的時候它會通知有關的view 層更新
    • 【箭頭方向統一的三角形】
    • view -> controller ->model -> view
    • 缺點:view 層和 model 層 耦合在一起,當項目邏輯復雜是,會造成代碼混亂。
  2. MVP(Model-View-Presenter)

    • Model(模型):同樣表示應用程序的數據和業務邏輯。
    • View(視圖):負責展示數據給用戶,并且接受用戶的輸入。
    • Presenter(主持人):將 model 的變化和view 的變化綁定在一起,(1) 實現 view 和 model 同步更新,(2)?實現 view 和 model 的解藕,還包含了其他的響應邏輯
    • view -> presenter?
    • presenter -> view
    • presenter -> model【沒有model-presenter 的箭頭】
  3. MVVM(Model-View-ViewModel)

    • Model(模型):同樣表示應用程序的數據和業務邏輯。
    • View(視圖):負責展示數據給用戶,并且接受用戶的輸入。
    • ViewModel(視圖模型):負責將模型的數據轉換為視圖所需的格式,并且處理視圖的用戶交互。視圖模型通過數據綁定與視圖進行連接。
    • MVVM 模式通常利用雙向數據綁定來實現視圖和視圖模型之間的通信。
    • 思想和 mvp 是相同的,不過通過雙向數據綁定,將 view 和model 的同步更新自動化了
      • ?model 發生變化,viewmodel 會自動更新
      • viewmodel 變化了, view 也會自動更新

vue 中 mvvm 數據雙向綁定原理/響應式原理

本質【數據劫持】+【發布訂閱模式】

? ? ? ? 注意【發布訂閱模式】和【觀察者模式】是有區別的

  1. 數據劫持 Observer
    1. vue2 使用 Object.definedProperty
    2. vue3 使用 proxy
    3. 第一步,就是把所有的變量變成響應式對象,都能夠觸發對應的 getter 和 setter
    4. vue 會創建一個 dep 對象,存儲當前屬性的所有 watcher 對象【dep 類似于發布訂閱中的那個存儲所有事件的數組】【watcher 對象類似于發布訂閱中的事件名稱
    5. 【依賴收集】當屬性的 getter 被訪問時,watcher 對象將會被添加到 dep 中【相當于訂閱發布中的 on 方法
    6. 當屬性的 setter 被調用時,dep 中所有 watcher 對象將會被通知執行更新【相當于發布訂閱中的 emit 方法
    7. 在數據劫持的步驟進行依賴收集
    8. observer 監聽自己的 model 數據變化
  2. compile 模版編譯
    1. 將vue模版編譯成渲染函數【h 函數】
    2. vue 將模版中的數據綁定語法(如?{{}} 和 v-model)轉換為對數據的 getter/setter 的調用
    3. 對每個指令對應的節點綁定更新函數【相當于發布訂閱中的回調函數
    4. 添加監聽數據的訂閱者,數據變動時,收到通知,更新視圖
  3. Watcher 監聽器
    1. 對應發布/訂閱模式中的訂閱者【就是 on(''change-name", fn) 中的 change-name這個方法】
    2. 在自身實例化時往屬性訂閱器 dep 里添加自己
    3. 自身有一個更新函數
    4. dep.notice 通知時,調用自身的 update 方法,并觸發 compile綁定的回調
    5. 利用 watcher 搭起 observer 和 compile 之間的通信橋梁
    6. 達到 數據變化 -> 視圖更新,視圖交互變化-> 數據 model 變化的雙向綁定效果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714861.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714861.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714861.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

edge 安裝筆記

依賴項: jukebox 下載代碼GitHub - rodrigo-castellon/jukebox 拷貝到根目錄即可,文件夾留一個根目錄jukebox vqvae_cache_path cache_dir "/vqvae.pth.tar" prior_cache_path cache_dir "/prior_level_2.pth.tar"

JavaWeb之 Servlet(2萬6千字詳解)

目錄 前言1. Servlet 簡介2. Servlet 前世今生3. Servlet 執行流程4. Servlet 快速入門5. 兩種配置 Servlet程序 URL的方式5.1 使用 注解來配置 Servlet程序 的 URL5.1.1 urlPattern 的配置規則精確匹配目錄匹配:使用 * 符號代表任意路徑擴展名匹配任意匹配 5.1.2 小…

【MATLAB】語音信號識別與處理:SG濾波算法去噪及譜相減算法呈現頻譜

1 基本定義 SG 濾波算法(Savitzky - Golay 濾波算法)是一種數字信號處理算法,用于對信號進行平滑處理。該算法利用最小二乘法擬合局部數據段,然后用擬合的函數來估計每個數據點的值,從而實現平滑處理。 SG 濾波算法的…

redis05 sprngboot整合redis

redis的Java客戶端 整合步驟 添加redis的pom依賴 <!-- 引入redis依賴 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency><!-- 引入redis連…

51單片機學習day02

基于普中的stc89c52&#xff0c; 串口&#xff1a; 通訊接口&#xff0c;51單片機自帶UART&#xff08;通用異步收發器&#xff09;&#xff0c;可實現窗口通訊。 硬件電路&#xff1a; 簡單雙向串口通信有兩根通信線&#xff08;發送端TXD和接收端RXD&#xff09;&#xff0…

HelixToolKit的模型旋轉操作

前面加載了模型以后&#xff0c;鼠標拖動和縮放比較好操作&#xff1b;但是旋轉似乎沒有&#xff0c; 操作了一陣&#xff0c;也不是沒有&#xff0c;應該是還不熟悉&#xff1b; 旋轉的指示器在右下角&#xff0c;現在U面看到正面&#xff0c; 想看一下模型的背面&#xff0…

【Java項目介紹和界面搭建】拼圖小游戲——添加圖片

&#x1f36c; 博主介紹&#x1f468;?&#x1f393; 博主介紹&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高興認識大家~ ?主攻領域&#xff1a;【滲透領域】【應急響應】 【Java】 【VulnHub靶場復現】【面試分析】 &#x1f389;點贊?評論?收藏 …

扼殺網絡中的環路:STP、RSTP、MSTP

目錄 前言&#xff1a; 一、STP&#xff08;Spanning Tree Protocol&#xff09; 1.1 STP功能 1.2 STP應用 二、RSTP&#xff08;Rapid Spanning Tree Protocol&#xff09; 2.1 RSTP功能 2.2 RSTP應用 三、MSTP&#xff08;Multiple Spanning Tree Protocol&#xff0…

Angular 由一個bug說起之四:jsonEditor使用不當造成的bug

一&#xff1a;問題 項目中使用了一個JSON第三方庫&#xff1a; GitHub - josdejong/jsoneditor: A web-based tool to view, edit, format, and validate JSON 當用戶編輯JSON格式的數據&#xff0c;查找替換時&#xff1a; 用戶的期望結果是&#xff1a;$$ 被替換為$$_text&a…

[物聯網] OneNet 多協議TCP透傳

[物聯網] OneNet 多協議TCP透傳 STM32物聯網–ONENET云平臺的多協議接入產品創建 : https://blog.csdn.net/qq_44942724/article/details/134492924 Onenet tcp 透傳 : https://blog.csdn.net/flyme2010/article/details/107086001 tcp服務端測試工具 : http://tcp.xnkiot.com/…

zephyr學習

zephyr內核對象學習 定時器 類似linux的定時器&#xff0c; 可以分別設置第一次到期時間和后續的周期觸發時間&#xff0c; 可以注冊到期回調和停止回調 還有一個計數狀態&#xff0c;用于標記timer到期了多少次 duration&#xff1a;設定timer第一次到期的時間。 period: …

SpringBoot3.2.0整合MyBatis-plus的相關問題及處理方法

SpringBoot3.2.0整合MyBatis-plus的相關問題 文章目錄 SpringBoot3.2.0整合MyBatis-plus的相關問題1. build.gradle2. mybatis-plus整合問題1. 錯誤描述2. 問題分析及解決1. 原因分析2. 解決方式 Springboot3.2.0 GA版發布于 2023-11-24 環境&#xff1a;SpringBoot3.2.0Gradle…

【蛀牙】日常生活如何正確護理牙齒?刷牙、洗牙、補牙

程序員生活指南之 【蛀牙】日常生活如何正確護理牙齒&#xff1f;刷牙、洗牙、補牙 文章目錄 一、日常如何清洗牙齒&#xff1f;——刷牙與洗牙1、牙齒污垢1.1 牙菌斑1.2 軟垢1.3 牙結石1.4 牙齦出血 2、如何刷牙2.1 關于時間2.2 各種工具2.3 巴氏刷牙法 二、定期進行洗牙3、如…

題目 1076: 內部收益率

題目描述: 在金融中&#xff0c;我們有時會用內部收益率IRR來評價項目的投資財務效益&#xff0c;它等于使得投資凈現值NPV等于0的貼現率。換句話說&#xff0c;給定項目的期數T、初始現金流CF0和項目各期的現金流CF1, CF2, ...&#xff0c;CFT&#xff0c;IRR是下面方程的解&…

RISC-V特權架構 - 特權模式與指令

RV32/64 特權架構 - 特權模式與指令 1 特權模式2 特權指令2.1 mret&#xff08;從機器模式返回到先前的模式&#xff09;2.2 sret&#xff08;從監管模式返回到先前的模式&#xff09;2.3 wfi&#xff08;等待中斷&#xff09;2.4 sfence.vma&#xff08;內存屏障&#xff09; …

SpringBoot+Vue+MySQL:裝修管理新架構探索

??計算機畢業編程指導師 ??個人介紹&#xff1a;自己非常喜歡研究技術問題&#xff01;專業做Java、Python、微信小程序、安卓、大數據、爬蟲、Golang、大屏等實戰項目。 ??實戰項目&#xff1a;有源碼或者技術上的問題歡迎在評論區一起討論交流&#xff01; ?? Java、…

FPGA開源項目分享——2D N-Body重力模擬器

?導語 今天繼續康奈爾大學FPGA 課程ECE 5760的典型案例分享——2D N-Body重力模擬器。 &#xff08;更多其他案例請參考網站&#xff1a; Final Projects ECE 5760&#xff09; 1. 項目概述 項目網址 Grav Sim 項目說明 該項目的目標是創建一個用DE1-SOC進行硬件加速的2…

Java面試技巧

一、面試前準備 復習基礎知識&#xff1a;深入理解Java核心概念&#xff0c;如JVM、JDK、JRE等。熟悉Java基本語法、面向對象編程、異常處理、集合類、IO流等。同時&#xff0c;對Java的新特性&#xff0c;如Lambda表達式、Stream API等也要有所了解。強化算法和數據結構&…

簡易內存池2 - 華為OD統一考試(C卷)

OD統一考試&#xff08;C卷&#xff09; 分值&#xff1a; 200分 題解&#xff1a; Java / Python / C 題目描述 請實現一個簡易內存池,根據請求命令完成內存分配和釋放。 內存池支持兩種操作命令&#xff0c;REQUEST和RELEASE&#xff0c;其格式為: REQUEST請求的內存大小 …

Redis 【1】—— 安裝 與 配置

Redis 【1】—— 安裝 與 配置 一、安裝 與 配置&#xff08;一&#xff09;使用 yum 安裝&#xff08;二&#xff09;創建符號鏈接1. 軟鏈接2. 相關指令 &#xff08;三&#xff09;修改配置文件&#xff08;四&#xff09;Redis 的啟停 一、安裝 與 配置 &#xff08;一&…