vue源码分析(3)

2019-10-28  本文已影响0人  June_Done

记录之...

  1. 实例:在初始化给data的属性进行数据劫持时创建的。
  2. 个数:与data中的属性一 一对应。
  3. 结构:id的标识符;sub:n个相关的watcher的容器。
  1. 实例:在初始化的解析大括号表达式/一般指令时创建。
  2. 个数:与模板表达式(不包含事件指令)一 一对应。
  3. watcher的结构如下:
this.cb = cb;   //用于更新界面的回调
this.vm = vm;   //vm
this.exp = exp;    //对应的表达式
this.depIds = { };   //相关的n个dep的容器对象
this.value = this.get();   //当前表达式对应的value
  1. 关系:多对多的关系
    data属性==>Dep ==> n个watcher(模板中有多个表达式使用了此属性)。
    表达式==>Watcher==>n个Dep(多层表达式a.b.c)。
  2. 如何建立的:vm.name = 'abc' -==> data中的name属性值变化 ==> name的set()调用 ==> dep ==> 相关的所有watcher==>cb() ==> updater
MVVM结构图.png
  1. 双向数据绑定是建立在单项数据绑定(model==>View)的基础上的。
  2. 双向数据绑定的实现流程:
    a. 在解析v-model指令时,给当前元素添加input监听。
    b. 当input的value发生改变时,讲最新的值赋值给当前表达式所对应的data属性。
上一篇 下一篇

猜你喜欢

热点阅读