1. computed
computed 是计算属性,它会根据你所依赖的数据动态显示新的计算结果。
如果依赖的属性没有变化,就不会重新计算。
getter/setter默认不会做缓存,Vue中做了特殊处理,如果依赖的数据不变,computed的值就不会重新计算。
推荐:如果数据要通过复杂逻辑来得出结果,那么就推荐使用计算属性
2. watch
watch是监听,键是 data 对应的数据,值是对应的回调函数。值也可以是方法名,或者包含选项的对象,当 data 的数据发生变化时,就会发生一个回调,他有两个参数,一个 val (修改后的 data 数据),一个 oldVal(原来的 data 数据)。
watch里面有两个选项:
deep:控制是否要看这个对象里面的属性变化。
immediate:控制是否在第一次渲染时执行这个函数。
watch的语法:
1: function(value, oldValue){},
2:(){},
3: [f1, f2],
4: 'methodName',
5: {handler:fn, deep:true, immediate:true},
'object.a': function(){}
}
6:vm.$watch('xxx', fn, {deep: .., immediate: ..}//'xxx'可以改为一个返回字符串的函数
注意:使用watch时,不要使用箭头函数来定义,因为箭头函数没有this,它的 this 会继承它的父级函数,但是它的父级函数是 window,导致箭头函数的 this 指向 window,而不是 Vue 实例。
3. 总结
-
如果一个数据需要经过复杂计算就用 computed
-
如果一个数据需要被监听并且对数据做一些操作就用 watch