watch和computed都是以Vue的依赖追踪机制为基础的:当某一个数据(称它为依赖数据)发生变化的时候,所有依赖这个数据的“相关”数据“自动”发生变化,也就是自动调用相关的函数去实现数据的变动。
区别:
computed
是一个计算属性,类似于过滤器,如果在data里面定义数据再在computed里面书写会报错
data () {
return {
firstName: 'firstName',
lastName: 'lastName'
}
},
computed: {
// firstName: function () { }, 会报错
fullName: function () {
return this.firstName + ' ' + this.lastName
}
},
缓存 多次点击methods返回的时间是不同的,但是打印出来的时间是一样的,因为打印的是第一次computed缓存起来的时间(存在依赖型数据并且依赖型数据发生改变,computed才会重新计算。)
computed: {
date: function () {
return new Date()
},
},
methods:{
getComputedDate: function () {
console.log(this.date)
}
watch
监听简单数据类型
data () {
return {
firstName: 'firstName',
lastName: 'lastName'
}
},
watch: {
firstName: function (value) {
console.log(value) //哈哈哈
console.log('watch --- firstName')
},
},
methods:{
changeFirstName: function () {
this.firstName ='哈哈哈'
}
监听复杂数据 (深度监听 deep:true)
watch:{
obj:{
handler:function(newVal,oldVal){
},
deep:true,
immediate:true //表示马上执行监听
}
}
注:watch是异步的