Vue源码中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()在源码内部如果实现的。
本文共计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()在源码内部如果实现的。

