美文网首页
透过vue了解mvvm原理

透过vue了解mvvm原理

作者: 写代码的女孩最可爱 | 来源:发表于2019-04-17 18:13 被阅读0次

什么是mvvm?

mvvm是Model-View-ViewModel的缩写,好吧,这样讲还是不知道这到底是个什么鬼,我们可能得先来看一下前端的发展史,有助于我们理解什么是mvvm以及我们为什么需要它。大致分为以下几个阶段:

  1. 用户看的网页是一样的,没有交互
    html是完全静态的网页,当你访问url时,服务器直接返回html文件给浏览器渲染
  2. 用户看到的网页是不一样的,没有交互
    html是由服务端根据不同情况拼接而成,当你访问url时,服务器直接返回拼接好的html给浏览器渲染
  • 2-1. 用户看到的网页是不一样的复杂的html,没有交互
    当html很复杂的时候,出现大量的重复html,由此产生模板变量
  1. 用户交互,需要更新页面内容
    重新获取一份html显然是不好的,由此催生了javascript,有了js才有了如今看见的这些花哨的网页
  2. js操作DOM节点,使用浏览器提供的原生api
    原生api并不好用加上各大浏览器提供的api各不相同,处理兼容性变得尤其困难
  3. jquery横空出世完美解决api的易用性以及浏览器兼容性问题
    交互要求更多
  4. MVC模式,允许js在前端修改页面样式或数据(后端配合完成)
    交互要求更花哨
  5. mvvm模式
    Model由js对象表示,View负责显示,做到模型和视图最大限度的分离,而ViewModel充当模型和视图的中间人,把模型的数据同步到视图,把视图的修改同步回模型,这样做的好处是什么呢?js不用再频繁的操作dom节点,而是把注意力都放在Model这个js对象上

vue.js可以说是mvvm架构最好的实现

那么vue是怎么实现ViewModel的呢?object.defineProperty()的set和get方法以及观察者模式实现

object.defineProperty()

object.defineProperty()可以直接在一个对象上定义一个新属性或修改对象已有的属性
举个例子:

var a  = {}
Object.defineProperty(a,"x",{
    value:12,
    enumerable:true,
    configurable:true,

})
a //{x: 12}
for(var key in a ){
    console.log(key)
}
x
Object.keys(a) // ["x"]

此方法的第三个参数为属性描述符,属性描述符有数据描述符和存取描述符两种形式,上面的例子是数据描述符,存取描述符有get和set两种可选键值:get函数是在访问时执行,set函数在改写属性时执行,举个例子

var a = {}
var x_value
Object.defineProperty(a, 'x', {
  enumerable: true,
  configurable: true,
  get: function () {
    return x_value
  },
  set: function (new_value) {
    x_value = new_value
  }
})
a.x = 99;
x_value // 99
x_value = 100;
a.x // 100

这里a.x的值和x_value就形成关联了,当其中一个改变时,另一个也会改变

相关文章

  • 透过vue了解mvvm原理

    什么是mvvm? mvvm是Model-View-ViewModel的缩写,好吧,这样讲还是不知道这到底是个什么鬼...

  • Vue实现原理

    vue实现原理 1、了解Object的属性defineProperty 2、vue中mvvm的实现: 数据变化更新...

  • Vue双向数据绑定原理

    剖析Vue实现原理 - 如何实现双向绑定mvvm 本文能帮你做什么?1、了解vue的双向数据绑定原理以及核心代码模...

  • 关于双向绑定的问题

    剖析Vue实现原理 - 如何实现双向绑定mvvm 本文能帮你做什么?1、了解vue的双向数据绑定原理以及核心代码模...

  • 从零实现一个VUE,深入了解vue实现原理

    授人以渔 不如授人以渔,剖析Vue实现原理 - 如何实现双向绑定mvvm 本文能帮你做什么?1、了解vue的双向数...

  • vue原理面试题资源整理

    vuex面试题 Vue生命周期 周期2 Vue通信 父子 兄弟 Vue响应式原理 MVVM Vue axios原理...

  • Vue2.0原理与MVVM的实现

    剖析Vue原理&实现双向绑定MVVM vue源码 双向绑定 -- MVVM 目前几种主流的MVC框架都实现了单向数...

  • Vue的34道题

    1、如何理解MVVM原理? MVVM的实现原理 2、响应式数据的原理是什么? 响应式数据与数据依赖基本原理vue双...

  • vue的mvvm原理解析及手写一个

    # 手写vue的mvvm实现原理 ## 1:mvc和mvvm的区别? MVC:modal-view-control...

  • 2019-10-31

    手写vue的mvvm实现原理 1:mvc和mvvm的区别? MVC:modal-view-controller,比...

网友评论

      本文标题:透过vue了解mvvm原理

      本文链接:https://www.haomeiwen.com/subject/tnwnwqtx.html