vue进阶

  1. 在compile阶段,会通过 el.attributes 来获取所有的attributes,并且通过正则匹配name的方式筛选出类似 v-xxx 的指令,生成一个指令的描述 descriptor,这个描述就包含了name, value, def 等等以后需要创建指令的时候传入的参数
  2. 在 _bindDir 阶段会根据上一步收集的指令描述符来创建指令 new Directive,并最终逐个调用指令的 ‘_bind” 方法
  3. 在指令的 _bind 方法中,会创建 Watcher 监听对应的表达式,比如 v-text=“name” 就会监听 name 表达式,当 this.name 改变时,会由 Observer 通过 dep 来通知 watcher,然后 watcher 调用 directive 的update方法。
    这里有个很有意思的事情,watcher是为了监听一个值而创建的,但是watcher本身会把这个值存起来,所以后面访问的时候不是 vm.name 而是 watcher.value 的形式访问的。

Dep 存在意义就是,他记录了 Watcher 和 Observer 之间的依赖关系,是二者的一个桥梁。

你可能感兴趣的:(vue进阶)