Vue 是如何实现数据双向绑定的?

Vue 是如何实现数据双向绑定的?

Vue 数据双向绑定主要是指:数据变化更新视图,视图变化更新数据

Vue 主要通过以下 4 个步骤来实现数据双向绑定的:

实现⼀个数据监听器 Observer: 对数据对象进⾏遍历,能够对数据对象的所有属性进行监听,利⽤ Object.defineProperty() 对属性都加上 setter 和 getter。这样的话,给这个对象的某个值赋值,就会触发 setter,那么就能监听到了数据变化。并通知订阅者

实现⼀个指令解析器 Compile: 对每个元素节点的指令进行扫描和解析,根据指令模板将模板中的变量都替换成数据,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,⼀旦数据有变动,收到通知,调⽤更新函数进⾏数据更新。

实现⼀个订阅者 Watcher: Watcher 订阅者是 Observer 和 Compile 之间通信的桥梁 ,主的任务是订阅 Observer 中的属性值变化的消息,当收到属性值变化的消息时,触发解析Compile 中对应的更新函数。

实现⼀个订阅器 Dep: 订阅器采⽤ 发布-订阅 设计模式,⽤来收集订阅者Watcher,对监听器 Observer 和 订阅者 Watcher 进⾏统⼀管理
在这里插入图片描述

总结
个人理解:
在new Vue的时候,在 Observer 中通过 Object.defineProperty() 达到数据劫持,代理所有数据的 gettersetter 属性,在每次触发 setter 的时候,都会通过 Dep 来通知WatcherWatcher 作为Observer数据监听器与Compile模板解析器之间的桥梁,当 Observer 监听到数据发生改变的时候,通过 Updater 来通知 Compile 更新视图,而 Compile 通过 Watcher 订阅对应数据,绑定更新函数,通过 Dep 来添加订阅者,达到双向绑定。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值