现在是市面上使用MVVM模型越来越多,相关的前端框架的选择也相应增多。

那么什么是MVVM模型,它和传统MVC模型有什么区别,接下来我们来总结探讨一下。

MVC和MVVM的区别_mvvm

MVVM即Model-View-ViewModel的简写。即模型-视图-视图模型。模型(Model)指的是后端传递的数据。视图(View)指的是所看到的页面。视图模型(ViewModel)是mvvm模式的核心,它是连接view和model的桥梁。它有两个方向:一是将模型(Model)转化成视图(View),即将后端传递的数据转化成所看到的页面。实现的方式是:数据绑定。二是将视图(View)转化成模型(Model),即将所看到的页面转化成后端的数据。实现的方式是:DOM 事件监听。这两个方向都实现的,我们称之为数据的双向绑定。
MVC和MVVM的区别_业务逻辑_02

MVC是Model-View- Controller的简写。即模型-视图-控制器。M和V指的意思和MVVM中的M和V意思一样。C即Controller指的是页面业务逻辑。使用MVC的目的就是将M和V的代码分离。MVC是单向通信。也就是View跟Model,必须通过Controller来承上启下。MVC和MVVM的区别并不是VM完全取代了C,只是在MVC的基础上增加了一层VM,只不过是弱化了C的概念,ViewModel存在目的在于抽离Controller中展示的业务逻辑,而不是替代Controller,其它视图操作业务等还是应该放在Controller中实现。也就是说MVVM实现的是业务逻辑组件的重用,使开发更高效,结构更清晰,增加代码的复用性。

VUE官方,也介绍了MVVM模型相关框架(如Vue 、 React、AngularJS、Knockout、Polymer等)的对比优缺点,可以参考,https://cn.vuejs.org/v2/guide/comparison.html

对比

Controller(应用逻辑控制层):将用户View的操作反馈给Model,通知其进行数据更新,业务逻辑的中心。

View更新的时候,必须要通过Controller去更新一遍Model;同样的Model更新的时候,也要去更新一遍视图。此时开发者是在同时维护View层和Model层。当页面复杂的时候,开发者不得不做许多繁琐的工作来保证数据的状态、页面的展示都是正确的。

MVVM是解决了这个问题View更新的时候通过ViewModel影响Model,Model更新的时候通过ViewModel影响View,都是通过ViewModel作为处理中心,这样, 开发者的精力被释放,只要聚焦在业务逻辑中。

v-model

目前几种主流的mvc(vm)框架都实现了单向数据绑定,而我所理解的双向数据绑定无非就是在单向绑定的基础上给可输入元素(input、textare等)添加了change(input)事件,来动态修改model和 view,并没有多高深。所以无需太过介怀是实现的单向或双向绑定。

你可以用 v-model 指令在表单 <input><textarea><select> 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。

v-model 会忽略所有表单元素的 value、checked、selected attribute 的初始值而总是将 Vue 实例的数据作为数据来源。你应该通过 JavaScript 在组件的 data 选项中声明初始值。

v-model 在内部为不同的输入元素使用不同的属性并抛出不同的事件:

text 和 textarea 元素使用 value 属性和 input 事件;(默认)
checkbox 和 radio 使用 checked 属性和 change 事件;(单个复选框,绑定到布尔值,多个复选框,绑定到同一个数组:)
select 字段将 value 作为 prop 并将 change 作为事件。