响应式/数据绑定详解


## 响应式/数据绑定(model==>View):
### 一旦更新了data中的某个属性数据, 所有界面上直接使用或间接使用了此属性的节点都会更新(更新)
## 实现数据绑定的2个重要技术
- 数据劫持/监视: 通过defineProperty()监视data中所有属性(任意层次)数据的变化, 一旦变化就去更新界面
- 订阅者-发布者模式: 能知道界面上哪些节点需要更新
## 四个重要对象
- Observer
    - 用来对data所有属性数据进行劫持的构造函数
    - 给data中所有属性重新定义属性描述(get/set)
    - 为data中的每个属性创建对应的dep对象
- Dep(Depend)
    - data中的每个属性(所有层次)都对应一个dep对象
    - 创建的时机
        - 在初始化define data中各个属性时创建对应的dep对象
        -  在data中的某个属性值被设置为新的对象时
    - 对象的结构
`     {
    id, // 每个dep都有一个唯一的id
    subs //包含n个对应watcher的数组(subscribes的简写)
    }   `
     - subs属性说明
          - 当一个watcher被创建时, 内部会将当前watcher对象添加到对应的dep对象的subs中
          - 当此data属性的值发生改变时, 所有subs中的watcher都会收到更新的通知, 从而最终更新对应的界面
- Compile
    - 用来解析模板页面的对象的构造函数(一个实例)
    - 利用compile对象解析模板页面
    - 每解析一个表达式(非事件指令)都会创建一个对应的watcher对象, 并建立watcher与dep的关系
    - complie与watcher关系: 一对多的关系
 - Watcher
     - 模板中每个非事件指令或表达式都对应一个watcher对象
     - 监视当前表达式数据的变化
     - 创建的时机: 在初始化编译模板时
- 对象的组成
- {
    vm,  //vm对象<br>
    exp, //对应指令的表达式<br>
        cb, //当表达式所对应的数据发生改变的回调函数<br>
    value, //表达式当前的值<br>
    depIds //表达式中各级属性所对应的dep对象的集合对象<br>
    //属性名为dep的id, 属性值为dep<br>
                }
                                
- dep与watcher的关系: 多对多    
    - 一个data中的属性对应对应一个dep, 一个dep中可能包含多个watcher(模板中有几个表达式使用到了属性)
    - 模板中一个非事件表达式对应一个watcher, 一个watcher中可能包含多个dep(表达式中包含了几个data属性)
                                
                                
                                
                                
                                
                                
                                
                                
                                
                                
                                
                                
                                
                                
                                
                                
                                
                                
                                
                                
                                
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值