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

1、MVVM模型的概念

​ MVVM — 是 Model、View、ViewModel 三者的缩写,是一种前端开发的模式,其核心在于数据和视图的双向数据绑定,不再需要程序猿手动操作DOM,也就是所谓的去 DOM 化,让前端开发能高效、便捷。

​ Model 是数据层,其中定义了页面的数据信息以及对应的操作逻辑。

​ View 是视图层,负责展示各种数据,也就是用户所看到的页面。

​ ViewModel 是一个抽象层,是数据层和视图层沟通的桥梁,通过双向数据绑定,一方面将 Model 的数据变化,实时更新到 View 中。另一方面将 View 中的触发的各类 DOM 事件,反馈到 Model 中,执行相应操作。

在这里插入图片描述

2、Vue 双向数据绑定的原理
名词概念:

数据劫持: 在访问或者修改对象的某个属性时,通过一段代码拦截这个行为,进行额外的操作或者修改,然后再返回结果。

发布者-订阅者模式: 定义了对象间的一对多的依赖关系,让多个订阅者对象同时监听某一个发布者对象,并且当该对象发生变化时,所有依赖于它的对象都会跟着发生变化。

Observer: 数据监听器,能够对数据对象的所有属性进行监听,如有变动可拿到最新的值并通知订阅者,内部采用的Obiect.defineProperty的getter和setter来实现。

Complie: 指令解析器,它的作用对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,初始化视图,以及将指令绑定相应的回调函数。

Watcher: 订阅者,作为连接Observer和Complie的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数。

Dep: 消息订阅器,内部维护了一个数组,用来收集所有订阅者(watcher),数据变动触发notify()方法,再调用订阅者的update方法。

具体原理:

​ Vue 的双向数据绑定是通过数据劫持并结合发布者-订阅者模式实现的,利用了 Object.defineProperty() 重新定义了对象获取属性的getter方法和设置属性的setter方法。

​ 展开来说就是,当Vue实例进入了初始化阶段,一方面Vue会遍历和递归data中的定义好的属性,并通过Object.defineProperty给他们设置getter/setter,劫持数据,实现Observer的数据变化监听功能;Vue的指令编译器Compile对元素节点的指令进行扫描和解析,初始化视图,并订阅Wacther来更新视图,此时wather会将自己添加到消息订阅器(Dep),初始化完毕。

​ 当数据发生变化时,Observer中的setter方法被触发,setter会立即调用Dep,触发notify()方法,开始遍历通知所有的订阅者,并调用订阅者的update方法,订阅者收到通知后对视图进行相应更新

在这里插入图片描述

详细内容请访问:
作者:小浪哦
链接:https://juejin.cn/post/6844903630546403336

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的小朱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值