vue数据双向绑定原理

vue采用订阅者模式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调

第一步,对需要observe的数据对象进行递归遍历,包括子属性对象的属性,一旦某个值发生改变,触发setter,这个数据变化可以被监听到

第二步,compile解析摸板指令,作用将模板中的变量替换成数据如"{{variable}}",然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,并添加监听数据的订阅者,一旦数据变动,收到通知,更新视图

第三步,watcher订阅者是Observer和Compile之间的通信桥梁,作用:在自身实例化时往属性订阅器(dep)中添加自己,自身要有一个updata()方法;当属性发生变动dep.notice()通知时,调用自身updata()方法,并触发compile中绑定的回调

最后,MVVM作为数据绑定的入口,整合Observer、Compile和Watcher三者,通过Observer来监听自己的model数据变化,通过Compile来解析编译模板指令,利用Watcher搭起Observer和Compile之间的通信桥梁,达到数据变化 -> 视图更新;视图交互变化(input) -> 数据model变更的双向绑定效



©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 当问及这个问题的时候,你可能首先就会想到vue的v-model,然后官网是这么介绍的 那么如何自己实现一个v-mo...
    雨蒙_snow阅读 754评论 0 0
  • vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.definePrope...
    泪滴在琴上阅读 14,741评论 0 5
  • 构建一个基于数据双向绑定原理的应用 首先,这一切都是基于我们能够实时监听到数据变化,并根据变化做出实时响应 构建一...
    hux1ao阅读 753评论 0 1
  • 好吧,本想找一张宝强时尚点的照片,结果没找着,就找了这张啦! 以下的观点可能很多人不认同,勿喷! 在这场离婚大战中...
    敏敏不吃鱼阅读 211评论 0 0
  • 我在西班牙读书时的房东是中国人。她女儿叫安吉拉,是中德混血。 这小家伙在西班牙瓦伦西亚出生,一睁眼便是黑头发的妈妈...
    四斤橘阅读 550评论 0 1