Vue是受MVVM启发的,那么有哪些相同之处呢?以及对应关系?

MVVM(Model-view-viewmodel)

MVVM还有一种模式model-view-binder,主要用来简化用户界面的事件驱动程序设计

MVVM可以分成四部分

  • Model:模型
  • View:视图
  • ViewModel:视图模型
  • Binder:绑定器

主要形式还是Model-ViewModel-View

模型:是指代表真实状态内容的领域模型(面向对象),或指代表内容的数据访问层(以数据为中心)

视图:是用户在屏幕上看到的结构、布局和外观(UI)

视图模型:暴露公共属性和命令的视图抽象。让视图和数据二者进行通信,靠的绑定器

绑定器:声明性数据和命令绑定

Vue和这四部分的关系

对应关系:

  • 视图:对应真实的html和css
  • 视图模型:对应Vue的模板语法
  • 绑定器:对应v-bind v-model @click :prop等绑定数据语法
  • 模型:Vue的实例中的那些属性
    datamethods $computed 等等

在一个.vue文件中,我们会看到3部分<template /> <script /> <style />

<template /> 负责视图模型和绑定器

<style /> 负责视图的CSS

<script /> 中定义的Vue实例负责模型的数据管理和绑定器的逻辑

如何用Vue解释Model-ViewModel-View呢?

ViewModel-View阶段

视图模型转化为视图,也即Vue中的模板语法转化为实际的HTML和CSS,这个部分主要由Vue自动实现,我们开发者主要处理的是Model-ViewModel阶段。

Model-ViewModel阶段

这个阶段就是我们实例化Vue对象,添加data,methods等操作,以及将数据绑定到模板上。

<template><div class='test' @click='add'>{{count}}</div>
</template>复制代码
// <script>
export default {data () {return {count: 0}},methods: {add (e) {this.count += 1}}
}复制代码

Model:定义data函数管理数据count,以及定义add函数控制count数据的变更

ViewModel:是抽象语法,主要是Vue的模板语法,绑定数据,之后Vue会将其转化为真实的HTML

由于,ViewModel和Model主要是绑定关系,也即是数据和视图是绑定的,你什么样的数据就决定了什么样的视图,所以我们一般也把Vue称为数据驱动框架。

所以很多时候,只要知道数据和ViewModel的关系,也就知道UI的样子了,这个时候,我们只需操作数据的结构,也就操作了视图。

<template><ul class='list'><li class='item' v-for='(v, index) in arr' :key='index'>{{v}}</li></ul>
</template/>复制代码
export default {data () {return {arr: [1, 2, 3, 4, 5]}},created () {// 改变数据arr的数据结构,添加新的数值this.arr.push(6)}
}复制代码

Model和ViewModel的关系:

arr和<li>标签绑定,有多少个arr元素就有多少个<li>

后面arr添加了一个元素6,这时候arr的长度是6,那应该有6个<li>,这就是数据和视图的绑定,由数据的结构我们就可以推出视图的样子。

所以我们要多从操作数据的角度思考问题,当然前提是你已经确定了Model和ViewModel的绑定关系是怎样的。这个时候我们只需操作Model就可以了。

上面的例子采用的数据结构是数组,当然还有很多数据结构。Model和ViewModel绑定后,基本上Model的数据结构就决定了。那么这时,我们只需根据这个Model的数据结构增删修改。

还有一点就是vue中有多种绑定方式,v-if v-for 等等,一个ViewModel只有一个Model的数据结构,但是相同的View可以有多种ViewModel

比如这个View<div>hello</div>,有多种ViewModel都可以生成这个,有多种ViewModel也即有多种Model(数据结构)

<template><div>{{data}}</div><div>{{obj.data}}</div><div>{{arr[0]}}</div>
</template>复制代码
export default {data () {return {data: 'hello',obj: {data: 'hello'},arr: ['hello']}}
}复制代码

上面有3种ViewModel和3种Model 但生成的View都是一样的<div>hello</div>

转载于:https://juejin.im/post/5d0c3541f265da1b827aa306

Vue和MVVM的对应关系相关推荐

  1. 实现 VUE 中 MVVM - step10 - Computed

    看这篇之前,如果没有看过之前的文章,移步查看: 实现 VUE 中 MVVM - step1 - defineProperty 实现 VUE 中 MVVM - step2 - Dep 实现 VUE 中 ...

  2. 【iMessage苹果相册推日历真机推】改成vue的MVVM模式现在前端趋向是去dom化

    推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息 作者推荐内容 2.相册 ...

  3. 对类Vue的MVVM前端库的实现

    关于实现MVVM,网上实在是太多了,本文为个人总结,结合源码以及一些别人的实现 关于双向绑定 vue 数据劫持 + 订阅 - 发布 ng 脏值检查 backbone.js 订阅-发布(这个没有使用过, ...

  4. 【转】React Vue MVC MVVM MVP

    首先,在谈这个话题之前, 我们有必要了解一下库和框架的区别. 我们先来看react官网以及vue官网对他们的定位: react: vue: react我们不说了,官网上明明白白说了,人家是一个libr ...

  5. Vue之MVVM、Vue实例对象、生命周期

    1.初识Vue Vue是一套用于构建用户界面的渐进式框架,Vue 被设计为可以自底向上逐层应用,Vue的核心是只关注视图层(如何理解),不仅易于上手,还便于与第三方库或既有项目整合. 渐进式框架:渐进 ...

  6. 简述Vue原理(MVVM设计模式)

    前端框架Vue使用了mvvm设计模式,mvvn=m+v+vm,它们分别代表什么呢? v代表的是view视图层,可以将该层理解为html页面中的元素,形如: <div id="app&q ...

  7. Vue的MVVM模型和双向数据绑定原理

    1.MVVM模型的概念 ​ MVVM - 是 Model.View.ViewModel 三者的缩写,是一种前端开发的模式,其核心在于数据和视图的双向数据绑定,不再需要程序猿手动操作DOM,也就是所谓的 ...

  8. Vue(MVVM)、React(MVVM)、Angular(MVC)对比

    前言 昨天阿里内推电面一面,面试官了解到项目中用过Vue,就问为什么前端框架使用Vue而不适用其他的框架,当时就懵了.因为只用过Vue,不了解其他两个框架,今天就赶紧去了解一下他们之间的区别.大家发现 ...

  9. vue.js MVVM模式介绍及案例

    1.vue.js是什么: Vue.js (读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视 ...

最新文章

  1. Eclipse问题集锦
  2. 《计算机网络应用基础》模拟试卷(六),《计算机与网络应用基础知识1》模拟试卷...
  3. 多大、谷歌大脑获ICML 2021杰出论文奖,田渊栋、陆昱成获荣誉提名!
  4. android 光晕动画,Android去掉SrollView、GrdiView、RecycleView、ViewPager等可滑动控件滑动到边缘的光晕效果...
  5. kylin与superset整合
  6. django结合nginx部署
  7. 最短路径 floyd java_java实现Floyd算法求最短路径
  8. 我看到东边的阳光就这样照进车窗
  9. 【C语言】矩阵乘法(二维数组)
  10. 身份证过期了银行卡还能用吗?
  11. IPv4和IPv6有什么不同
  12. Java aio(异步网络IO)初探
  13. Wet Shark and Two Subsequences
  14. flashfxp修改服务器密码,flashfxp服务器端设置
  15. 小猪短租住房信息爬取
  16. 速卖通API + 奇门 + 聚石塔 完整流程
  17. C语言数组比较相等memcmp,使用memcmp比较两个变量结果一定吗?
  18. 树的最大连通分支问题
  19. 基于YOLOv3的车辆号牌定位
  20. web前端常见面试题总结

热门文章

  1. greedy算法/算法导论/挑战程序设计竞赛
  2. POJ 3254 Corn Fields [DP]
  3. ORACLE登录错误的解决方法
  4. 循证e刊 安慰剂的前世今生
  5. (Java) Md5Utils
  6. cookie、localStorage和sessionStorage三者的异同
  7. My97DatePicker 开始日期不能大于 结束日期
  8. java数组初始化的三种方式
  9. NSString常用方法
  10. .NET/C# 使用Stopwatch测量运行时间