MVVM 模式、Vue 双向绑定原理

2023-09-18 12:01:32

MVVM模式是什么 


传统的 MVC 指的是,用户操作会请求服务端路由,路由会调用对应的控制器来处理,控制器会获取数据。将结果返回给前端,页面重新渲染

MVVM(Model-View-ViewModel)是一种软件架构模式,用于实现界面(UI)和业务逻辑的分离。他的设计目标是将界面的开发与后端的业务逻辑分离,使得代码易于理解、维护和测试。

        MVVM各个组成部分的职责如下:

  • Model(模型):表示应用程序的数据业务逻辑,它负责数据的存储、检索和更新,并封装了相关的数据操作和规则。
  • View(视图):展示用户的界面,通常是由UI元素组成的。他是负责与用户进行交互的界面,负责将数据呈现给用户,并接收用户的输入
  • ViewModel(视图模型):连接视图和模型,负责处理业务逻辑和数据交互。它从model中获取数据,并将数据转换为为View中可以理解和展示的数据。ViewModel还负责监听View的变化,并根据用户的输入更新Model的数据。

MVVM的核心思想是数据绑定

Vue双向数据绑定原理

        MVVM的核心思想是数据绑定,通过双向绑定View和ViewModel中的数据保持同步。当ViewModel中的数据发生变化的时候,View中的数据会同步更新,反之亦然。这种双向绑定的方式使得开发者只需要关注逻辑的开发,不需要手动去操作DOM来更新界面。 

Vue.js是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter。在数据变动时候发布消息给订阅者,出发相应的监听回调,主要分为一下几个步骤:

  1. 需要observer的数据对象进行递归遍历,包括子属性对象的属性,都加上setter和getter这样的话,给这对象的某个属性值,就会出发setter,那么久能监听到数据的变化
  2. compile解析模板命令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图
  3. watcher订阅者是Observe和Compile之间通信的桥梁,主要做的事情是:1在自身实例化时往属性订阅器(dep)里面添加自己 自身必须有一个update0方法 图待属性变动dep.notice0通知时,能调用自身的update0万法,并触发Compile中绑定的回调,则功成身退。
  4. MVVM作为数据绑定的入口,整合Observer、 Compile和Watcher二者,通过Observer来监听自己的model数据变化,通过Compile来解析编译模板指令,最终利用Watcher搭起Observer和Compile之间的通信桥梁,达到数据变化 ->视图更新,视图交互变化(input) ->数据model变更的双向绑定效果

参考:

前端进阶之旅

更多推荐

软件项目管理【UML-类图】

前言UML图有很多种,但是并非必须掌握所有的UML图,才能完整系统分析和设计工作。一般说来,在UML图中,只要掌握类图、用例图、时序图的使用,就能完成大部分的工作。也就是说,掌握UML的20%,就能做80%的事情。对于程序员来说,最频繁使用的莫过于类图。目录前言一、什么是类图二、类图中类表示法三、类图中具体类、抽象、接

UML基础与应用之面向对象

UML(UnifiedModelingLanguage)是一种用于软件系统建模的标准化语言,它使用图形符号和文本来描述软件系统的结构、行为和交互。在面向对象编程中,UML被广泛应用于软件系统的设计和分析阶段。本文将总结UML基础与应用之面向对象的重要概念和常用图形符号。一、面向对象编程基础:类与对象:类是对具有相同属性

软件设计师-UML基础教程

场景针对UML1.5各种模型图的构成和功能进行说明。UML概述UML简介UML(UnifiedModelingLanguage)为面向对象软件设计提供统一的、标准的、可视化的建模语言。适用于描述以用例为驱动,以体系结构为中心的软件设计的全过程。UML的定义包括UML语义和UML表示法两个部分。(1)UML语义:UML对

机器学习入门教学——损失函数(极大似然估计法)

1、前言我们在训练神经网络时,最常用到的方法就是梯度下降法。在了解梯度下降法前,我们需要了解什么是损失(代价)函数。所谓求的梯度,就是损失函数的梯度。如果不知道什么是梯度下降的,可以看一下这篇文章:机器学习入门教学——梯度下降、梯度上升_恣睢s的博客-CSDN博客损失函数其实就是神经网络里的标准和期望的标准相差多少的定

ESP32主板-MoonESP32

==产品简介==Moon-ESP32主板,一款以双核芯片ESP32-E为主芯片的主控板,支持WiFi和蓝牙双模通信,低功耗,板载LED指示灯,引出所有IO端口,并提供多个I2C端口、SPI端口、串行端口,方便连接,拓展性强。Moon-ESP32主板深度支持ArduinoIDE编程,并且支持Mind+图形化编程,Mixl

近世代数之集合与映射

近世代数之集合与映射近世代数为密码学基础,因此想要补充一下这方面的相关概念与性质,因此进行记录与分享。主要参考书籍为《近世代数基础》-张禾瑞集合:(有限或者无限个)固定事物的全体叫做一个集合。元素:组成一个集合的事物叫做这个集合的元素空集合:一个没有元素的集合叫做空集合子集:若集合B的每一个元素都属于集合A,则说,B为

计算机视觉实战项目(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别)

图像分类教程博客_传送门链接:链接在本教程中,您将学习如何使用迁移学习训练卷积神经网络以进行图像分类。您可以在cs231n上阅读有关迁移学习的更多信息。本文主要目的是教会你如何自己搭建分类模型,耐心看完,相信会有很大收获。废话不多说,直切主题…首先们要知道深度学习大都包含了下面几个方面:1.加载(处理)数据2.网络搭建

物联网:用python调入机器学习分析物联网数据入侵检测模块

要使用Python调用机器学习分析物联网数据入侵检测模块,您需要以下步骤:安装Python和相关的机器学习库,如scikit-learn、pandas、numpy等。您可以使用pip命令来安装这些库。准备输入数据。这些数据可以是来自物联网设备的原始数据,例如传感器读数、错误代码等。对输入数据进行特征工程。这涉及将原始数

“探索前后端分离架构下的Vue.js应用开发“

目录引言1.前后端分离2.Vue的简介1.Vue.js是什么?2.库和框架的区别3.MVVM的介绍3.Vue的入门数据的双向绑定数据的单项绑定4.Vue的生命周期总结引言在当今互联网时代,前后端分离架构已经成为了Web应用开发的主流趋势。前后端分离架构的核心思想是将前端和后端的开发过程解耦,使得前端和后端可以独立开发、

[JAVEee]SpringBoot项目的创建

SpringBoot可以更好的开发Spring项目,本文章将使用idea社区版来演示创建项目的过程与注意事项.SpringBoot的优点SpringBoot中内置快速添加依赖的功能,能够便捷的集成各种框架,帮助开发.内置运行容器,无需配置Tomcat容器等其他web容器,可直接进行项目的部署与运行.更好的使用注解与配置

AI Studio星河社区生产力实践:基于文心一言快速搭建知识库问答

还在寻找基于文心一言搭建本地知识库问答的方案吗?AIStudio星河社区带你实战演练(支持私有化部署)!相信对于大语言模型(LLM)有所涉猎的朋友,对于“老网红”知识库问答不会陌生。自从大模型爆火后,开发者都希望尽快进行开发实战,企业都希望尽快在产品中集成LLM的能力,结合业务快速落地,那最直接的方式就是构建知识库问答

热文推荐