全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

前端 Vue.js 和 MVVM 详细介绍

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 方法,订阅者收到通知后对视图进行相应的更新。

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# 前端  # 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小时内与您取得联系。