javascript - Vue.js中计算属性是怎么知道它依赖的数据的?
巴扎黑
巴扎黑 2017-04-10 16:45:31
[JavaScript讨论组]
var vm = new Vue({
  el: '#example',
  data: {
    a: 1
  },
  computed: {
    // a computed getter
    b: function () {
      // `this` points to the vm instance
      return this.a + 1
    }
  }
})

b是怎么知道它要依赖a的?

巴扎黑
巴扎黑

全部回复(2)
迷茫

Vue 中的计算属性是由 lazy watcher 实现的,而 watcher 的依赖关系是由依赖收集(dependency collection)确定的。

  1. Vue 实例初始化过程中,将所有计算属性包装为 lazy watcher;

  2. 首次访问计算属性时,watcher 为 dirty,此时开始计算此 watcher 的值;

  3. 计算开始之前,此 watcher 将被设置为依赖目标,开始依赖收集(相关代码);

  4. 计算 watcher 值的过程中,被访问到属性的 getter 中会是检查是否存在依赖目标,若存在依赖目标就创建依赖关系(相关代码);

  5. watcher 的值计算完成后,新的依赖将被设置,旧的依赖会被删除,依赖收集完成。

  6. 当依赖属性更新时,会通知自身的依赖目标,watcher 被设置为 dirty(相关代码);

  7. 再次访问该计算属性,重复计算及依赖收集步骤(3-6)。

天蓬老师

你在视图中使用的数据是b
但b是如何来的呢?你在计算属性中对b的定义说明了依赖来源:this.a 啊

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号