watch和computed的区别
- watch是监听一个变量变化,进行一系列的操作,支持异步操作,不缓存;
- computed是监听计算属性用到的多个变量,任意一个发生变化时,重新计算该计算属性,不支持异步操作,能缓存;
- 需要在数据变化时执行异步或开销较大的操作时,适合用watch;
- watch有immideate和deep两个属性,支持加载时立即执行一个函数和深度监听对象内部的变化(监听数组不需要这样);
vm.$watch
-
参数:
-
{string | Function} expOrFn -
{Function | Object} callback -
{Object} [options]-
{boolean} deep选项:deep为了发现对象内部值的变化,可以在选项参数中指定
deep: true;监听数组的变更不需要这么做。
vm.$watch('someObject', callback, { deep: true }) vm.someObject.nestedValue = 123 // callback is fired -
{boolean} immediate选项:immediate在选项参数中指定
immediate: true将立即以表达式的当前值触发回调:vm.$watch('a', callback, { immediate: true }) // 立即以 `a` 的当前值触发回调带有
immediate选项时,你不能在第一次回调时取消侦听给定的 property。
-
-
-
返回值:
{Function} unwatch -
用法:
观察 Vue 实例上的一个表达式或者一个函数计算结果的变化。回调函数得到的参数为新值和旧值。表达式只接受简单的键路径。对于更复杂的表达式,用一个函数取代。
// 键路径
vm.$watch('a.b.c', function (newVal, oldVal) {
// 做点什么
})
// 函数
vm.$watch(
function () {
// 表达式 `this.a + this.b` 每次得出一个不同的结果时
// 处理函数都会被调用。
// 这就像监听一个未被定义的计算属性
return this.a + this.b
},
function (newVal, oldVal) {
// 做点什么
}
)
vm.$watch 返回一个取消观察函数,用来停止触发回调:
var unwatch = vm.$watch('a', cb)
// 之后取消观察
unwatch()
\