Vue源码中vm.$watch()是如何实现深度解析的?

更新于
2026-10-02 05:37:55
0阅读来源:SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2013个文字,预计阅读时间需要9分钟。

关于vm.$watch()的详细用法,请参阅官方文档。以下是大致用法:

javascriptscriptconst app=new Vue({ el: ... // 其他选项...});

关于vm.$watch()详细用法可以见官网。

大致用法如下:

<script> const app = new Vue({ el: "#app", data: { a: { b: { c: 'c' } } }, mounted () { this.$watch(function () { return this.a.b.c }, this.handle, { deep: true, immediate: true // 默认会初始化执行一次handle }) }, methods: { handle (newVal, oldVal) { console.log(this.a) console.log(newVal, oldVal) }, changeValue () { this.a.b.c = 'change' } } }) </script>

可以看到data属性整个a对象被Observe, 只要被Observe就会有一个__ob__标示(即Observe实例), 可以看到__ob__里面有dep,前面讲过依赖(dep)都是存在Observe实例里面, subs存储的就是对应属性的依赖(Watcher)。 好了回到正文, vm.$watch()在源码内部如果实现的。

阅读全文

本文共计2013个文字,预计阅读时间需要9分钟。

关于vm.$watch()的详细用法,请参阅官方文档。以下是大致用法:

javascriptscriptconst app=new Vue({ el: ... // 其他选项...});

关于vm.$watch()详细用法可以见官网。

大致用法如下:

<script> const app = new Vue({ el: "#app", data: { a: { b: { c: 'c' } } }, mounted () { this.$watch(function () { return this.a.b.c }, this.handle, { deep: true, immediate: true // 默认会初始化执行一次handle }) }, methods: { handle (newVal, oldVal) { console.log(this.a) console.log(newVal, oldVal) }, changeValue () { this.a.b.c = 'change' } } }) </script>

可以看到data属性整个a对象被Observe, 只要被Observe就会有一个__ob__标示(即Observe实例), 可以看到__ob__里面有dep,前面讲过依赖(dep)都是存在Observe实例里面, subs存储的就是对应属性的依赖(Watcher)。 好了回到正文, vm.$watch()在源码内部如果实现的。

阅读全文