watch的用法:用于观察一个表达式或comput ed 两数在Vue.js实例上的变化,回调两数调用时, 会从参数得到新数据(newvalue )和旧数据(oldvalue)。参数:
{string Function} expOrFn
callback 回调
options (immidate以及deep)。
返回值:返回一个unwatch函数,用于取消对数据的监听,日常开发会忽略的点。
实现原理:vm.$watch其实是对watcher 的一种封装,添加了immidate 和 deep的功能。参数处理:当expOrFn是函数时,读取的所有数据也都会被watcher 观察, 当其 任 意 一 个 发 生 变 化 时 , watcher都会得到通知;是字符串类型的keypath时,watcher 会读取这个keypath 所指向的数据并观察这个数据的变化。
watcher 的收集依赖:使用depIds 来判断如果 当前wat cher 已经订阅了该Dep,当依赖发生 变化时,会通知watcher 重新读取最新的数据。如果没有这个判断,就会发现每当数据发生了变 化,watcher 都会读取最新的数据。而读数据就会再次收集依赖,这就会导致Dep中的依赖有重 复。这样当数据发生变化时,会同时通知多个wat cher。watcher和dep是多对多的关系。
deep:对当前监听的这个值的子值都触发一遍收集依赖和触发依赖。
{string Function} expOrFn
callback 回调
options (immidate以及deep)。
返回值:返回一个unwatch函数,用于取消对数据的监听,日常开发会忽略的点。
实现原理:vm.$watch其实是对watcher 的一种封装,添加了immidate 和 deep的功能。参数处理:当expOrFn是函数时,读取的所有数据也都会被watcher 观察, 当其 任 意 一 个 发 生 变 化 时 , watcher都会得到通知;是字符串类型的keypath时,watcher 会读取这个keypath 所指向的数据并观察这个数据的变化。
watcher 的收集依赖:使用depIds 来判断如果 当前wat cher 已经订阅了该Dep,当依赖发生 变化时,会通知watcher 重新读取最新的数据。如果没有这个判断,就会发现每当数据发生了变 化,watcher 都会读取最新的数据。而读数据就会再次收集依赖,这就会导致Dep中的依赖有重 复。这样当数据发生变化时,会同时通知多个wat cher。watcher和dep是多对多的关系。
deep:对当前监听的这个值的子值都触发一遍收集依赖和触发依赖。