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 应用程式是由这三部分组成的:
在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 又稍微发了点变化:
这种 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 追踪依赖,在属性被访问和修改时通知变化。
从图中可以看出,当执行 new Vue() 时,Vue 就进入了初始化阶段,一方面Vue 会遍历 data 选项中的属性,并用 Object.defineProperty 将它们转为 getter/setter,实现数据变化监听功能;另一方面,Vue 的指令编译器Compile 对元素节点的指令进行扫描和解析,初始化视图,并订阅Watcher 来更新视图, 此时Wather 会将自己添加到消息订阅器中(Dep),初始化完毕。
当数据发生变化时,Observer 中的 setter 方法被触发,setter 会立即调用Dep.notify(),Dep 开始遍历所有的订阅者,并调用订阅者的 update 方法,订阅者收到通知后对视图进行相应的更新。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# 前端
# Vue.js
# 和
# MVVM
# 详细介绍
# vue中的mvvm模式讲解
# Vue的MVVM实现方法
# Vue.js 和 MVVM 的注意事项
# Vue原理剖析 实现双向绑定MVVM
# 详细聊聊Vue.js中的MVVM
# 绑定
# 遍历
# 是一个
# 是在
# 第一个
# 不需要
# 它是
# 并将
# 来实现
# 新到
# 的是
# 后端
# 解决了
# 专注于
# 也会
# 出了
# 很难
# 在这
# 就不
# 如有
相关文章:
如何用虚拟主机快速搭建网站?详细步骤解析
在线制作视频的网站有哪些,电脑如何制作视频短片?
如何挑选高效建站主机与优质域名?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
如何在搬瓦工VPS快速搭建网站?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
公众号网站制作网页,微信公众号怎么制作?
建站之星代理如何获取技术支持?
高端网站建设与定制开发一站式解决方案 中企动力
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何用PHP快速搭建高效网站?分步指南
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
如何选择高效稳定的ISP建站解决方案?
建站之星安装步骤有哪些常见问题?
已有域名能否直接搭建网站?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
TestNG的testng.xml配置文件怎么写
建站之星2.7模板快速切换与批量管理功能操作指南
Swift中循环语句中的转移语句 break 和 continue
大连网站制作公司哪家好一点,大连买房网站哪个好?
如何在西部数码注册域名并快速搭建网站?
微信h5制作网站有哪些,免费微信H5页面制作工具?
制作表格网站有哪些,线上表格怎么弄?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
如何快速上传自定义模板至建站之星?
招商网站制作流程,网站招商广告语?
香港服务器选型指南:免备案配置与高效建站方案解析
网站制作知乎推荐,想做自己的网站用什么工具比较好?
,柠檬视频怎样兑换vip?
建站主机服务器选型指南与性能优化方案解析
网站图片在线制作软件,怎么在图片上做链接?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
南宁网站建设制作定制,南宁网站建设可以定制吗?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
如何选择域名并搭建高效网站?
如何快速生成专业多端适配建站电话?
南平网站制作公司,2025年南平市事业单位报名时间?
制作网站公司那家好,网络公司是做什么的?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
如何通过虚拟机搭建网站?详细步骤解析
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
大型企业网站制作流程,做网站需要注册公司吗?
动图在线制作网站有哪些,滑动动图图集怎么做?
如何在万网自助建站中设置域名及备案?
高防服务器如何保障网站安全无虞?
成都网站制作报价公司,成都工业用气开户费用?
如何零成本快速生成个人自助网站?
高端建站如何打造兼具美学与转化的品牌官网?
*请认真填写需求信息,我们会在24小时内与您取得联系。