vue2.0双向数据绑定

 双向数据绑定响应流程:    

       data中数据都被observe对象设置了新的set,get方法(相当于劫持数据的获取和更新),一旦数据变化,触发observe类里面的Object.defineProperty对象中的set方法,set方法中判断数据是新数据(newVal)还是旧数据(oldVal),如果是旧数据,直接return,如果是新数据,触发dep.notify方法去遍历存在dep对象中的各个watcher,并且通知wtacher,watcher执行update操作通过render函数编译成虚拟dom,(此前complie去解析旧模板,把ast抽象语法树通过render函数编译成虚拟dom),此时存了两份虚拟dom的数据,在patch阶段通过diff算法比对,逐层比较,最后调用vm._update把虚拟dom更新为真实dom。

Observer:


          观察者类,把data中数据转化为响应式数据(使用核心方法Object.defineProperty来把传入的data中的数据进行数据劫持,配置对应的setter和getter,成为响应式数据)

dep:


          发布者,用来存放watcher,属于一对多关系,一个dep中可以放多个订阅者,dep.notify()方法就是用来通知watcher的

watcher:


           订阅者,存于dep对象中,每个data数据都会使用一次或多次,使用几次,dep中就存在几个watcher订阅者,方便数据更新时,及时通知各个使用该数据的节点,通知成功后,执行update方法,调用render函数

complier:


          编译阶段,用来解析模板,把事先存好的AST语法的抽象树编译成render函数认识的语法进行渲染,方便后面进行虚拟dom的比对

render:


           将complier和watcher的数据进行渲染成虚拟dom,两份数据准备好,准备在patch阶段进行比对


patch:


          补丁,这个阶段进行两份虚拟dom的比对,比对算法采用diff算法,不再进行dom遍历,只是比较两份数据中同层级的变化,无变化,不动,有变化,就替换掉


           
         

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值