Vue.js 双向绑定实现原理
1、编译代码,将代码中的特殊模板替换成vue属性值,模板得到初始化。利用DocumentFragment存储dom,完成遍历后一次性添加到原始dom中,只发生1次渲染操作,提高性能。
2、例如input控件text发生变化时需要同步修改data中对应的属性,所以监听input控件的输入事件,如有变化就调用data中属性的set方法,实现属性值更新。为属性添加get、set方法需要使用Object.defineProperty() 覆盖原始属性的实现。这一步骤即为响应式数据绑定
3、如何让文本节点实时变化? 利用订阅发布模式,通知文本节点属性变化。将每一个属性添加一个发布者,编译节点时为模板节点绑定一个watcher,并将watcher添加进属性的发布者模型(dep.subs)中如果属性值发生变化,遍历调用每一个订阅者的watcher.update方法。
以上即为简单的vue双向绑定实现原理。
1 |
|