watch:{ [key: string]: string | Function | Object | Array } 是监听数据 无缓存,watch是异步的,一般着重于执行一个函数。watch里不可以用箭头函数,因为this会指向window
computed:{ [key: string]: Function | { get: Function, set: Function } } 是计算属性,有缓存,着重于依赖之间的变化和缓存
methods:{ [key: string]: Function }
new Vue({
data:{
obj:{
a:'a'
}
}
}
watch:{
obj(){
handler:{
console.log('obj changed')
}
deep:true
// 如果改变obj.a的值,obj也会变化。相当于监听了obj里面的所有属性。“该回调会在任何被侦听的对象的 property 改变时被调用,不论其被嵌套多深”
}
}).$mount(#app)
- computed 和 methods 相比,最大区别是 computed 有缓存:如果 computed 属性依赖的属性没有变化,那么 computed 属性就不会重新计算。methods 则是看到一次计算一次。
- watch 和 computed 相比,computed 是计算出一个属性(废话),而 watch 则可能是做别的事情(如上报数据)
computed和watch的区别:
- computed是计算属性,watch是监听属性
- computed调用时不需要加括号,根据依赖自动缓存,如果 computed 属性依赖的属性没有变化,那么 computed 属性就不会重新计算。
- watch有两个选项:immediate,表示第一次渲染是否要执行,deep,是否要监听对象里面的属性。变化了就会执行里面的函数