Vue和MVVM的对应关系

栏目: 编程语言 · 发布时间: 5年前

内容简介:Vue是受MVVM启发的,那么有哪些相同之处呢?以及对应关系?MVVM还有一种模式MVVM可以分成四部分

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

MVVM(Model-view-viewmodel)

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

MVVM可以分成四部分

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

主要形式还是 Model-ViewModel-View

Vue和MVVM的对应关系

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

视图:是用户在屏幕上看到的结构、布局和外观(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>


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Probability and Computing

Probability and Computing

Michael Mitzenmacher、Eli Upfal / Cambridge University Press / 2005-01-31 / USD 66.00

Assuming only an elementary background in discrete mathematics, this textbook is an excellent introduction to the probabilistic techniques and paradigms used in the development of probabilistic algori......一起来看看 《Probability and Computing》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具