Watcher

功能

  • 当数据变化触发依赖, dep 通知所有的 Watcher 实例更新视图

  • 自身实例化的时候往 dep 对象中添加自己

class Watcher {constructor(vm, key, cb) {this.vm = vm// data 中的属性名称this.key = key// 当数据变化的时候,调用 cb 更新视图this.cb = cb// 在 Dep 的静态属性上记录当前 watcher 对象,当访问数据的时候把 watcher 添加到dep 的 subs 中Dep.target = this// 触发一次 getter,让 dep 为当前 key 记录 watcherthis.oldValue = vm[key]// 清空 targetDep.target = null // 防止重复添加}update () {const newValue = this.vm[this.key]if (this.oldValue === newValue) {return}this.cb(newValue)}
}

Vue (响应式原理-模拟-5-Watcher)相关推荐

  1. Vue (响应式原理-模拟-2-Observer)

    Observer 功能 负责把 data 选项中的属性转换成响应式数据 data 中的某个属性也是对象,把该属性转换成响应式数据 数据变化发送通知 添加 Dep 和 Watcher 的依赖关系 数据变 ...

  2. Vue (响应式原理-模拟-4-Dep)

    Dep 功能 收集依赖,添加观察者(watcher) 通知所有观察者 class Dep {constructor() {// 存储所有的观察者this.subs = []}// 添加观察者addSu ...

  3. Vue (响应式原理-模拟-3-Compiler)

    Compiler 功能 负责编译模板,解析指令/插值表达式 负责页面的首次渲染 当数据变化后重新渲染视图 // 负责解析指令/插值表达式 class Compiler {constructor(vm) ...

  4. Vue (响应式原理-模拟-1-vue)

    Vue 功能 负责接收初始化的参数(选项) 负责把 data 中的属性注入到 Vue 实例,转换成 getter/setter 负责调用 observer 监听 data 中所有属性的变化 负责调用 ...

  5. Vue (响应式原理-模拟-0)

    Vue 把data中的成员注入到Vue实例,并且把data中的成员转化为getter/setter Observer 能够对数据对象的所有属性进行监听,如有变动可以拿到最新值并通知Dep Vue 功能 ...

  6. 模拟Vue响应式原理

    模拟Vue响应式原理 设计模式 发布订阅模式 我们假定,存在一个"信号中心",某个任务执行完成,就向信号中心"发布"(publish)一个信 号,其他任务可以向 ...

  7. vue 数组删除 dome没更新_详解Vue响应式原理

    摘要: 搞懂Vue响应式原理! 作者:浪里行舟 原文:深入浅出Vue响应式原理 Fundebug经授权转载,版权归原作者所有. 前言 Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是 ...

  8. Vue学习 — Vue响应式原理

    一. Object.defineProperty 在学习vue响应式原理之前,必须搞懂 Object.defineProperty. Object.defineProperty(obj, prop, ...

  9. 详解Vue响应式原理

    摘要: 搞懂Vue响应式原理! 作者:浪里行舟 原文:深入浅出Vue响应式原理 Fundebug经授权转载,版权归原作者所有. 前言 Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是 ...

最新文章

  1. MySQL 学习笔记(16)— 子查询(单行单列、一行多列、多行多列、 ALL、ANY、SOME 运算符、EXISTS 操作符)
  2. Swift - 简单的原生与网页交互
  3. 2000+引用的fastp推出重磅更新,再提速一倍!
  4. FIR滤波器设计(包括Verilog HDL设计以及MATLAB设计)
  5. Vue静态资源的获取
  6. python远程桌面控制_手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
  7. python linux 优化_Python 代码性能优化技巧
  8. linux上怎么快速删除一个目录?
  9. 长为N的数组,元素范围是0-N-1,其中只有一个数是重复的,找出这个重复元素...
  10. [css] CSS的伪类和伪对象有什么不同?
  11. micropython固件源码_Micropython加速物联网开发7 - Micropython源码编译与固件更新
  12. python的knn算法list_[机器学习]kNN算法python实现(实例:数字识别)
  13. 云南昭通暴雨强度公式_最新玉溪市中心城区暴雨强度公式(修订)
  14. ue编辑器绿色免安装版
  15. 7个实用的Python自动化代码,别再重复造轮子了
  16. log 1用计算机怎么打开,log是什么?log怎么打开?
  17. Java 简易五子棋
  18. 【webrtc0419 点对点视频聊天功能】
  19. 网秦创始人林宇称遭史文勇非法拘禁 后者称是恶意中伤
  20. 如何在Win10家庭版上永久、免费、快速拥有一台虚拟机?

热门文章

  1. $python日期和时间的处理
  2. linux命令大全网址
  3. UML和模式应用5:细化阶段(5)---系统顺序图
  4. bzoj1008: [HNOI2008]越狱
  5. C# 禁止修改已装箱了的值类型的字段值,但是可以通过接口的方式实现
  6. 【SAS NOTE】数组
  7. [易学C#]C#3.0语言新特性之扩展方法
  8. 写帮助大家学习的小框架
  9. idea vue项目通过@跳转 vue设置完@映射路径之后在IDEA中无法跳转
  10. Flutter RotatedBox 旋转组件