区别:
1.computed能完成的功能,watch都可以完成。
2、watch能完成的功能,computed不一定能够完成,例如:watch可以进行异步操作
两个重要的小原则:
1.所被Vue管理的函数,最好写成普通函数,这样this的指向才是vm或 组件实例对象
2.所有不被Vue管理的函数(定时器的回调函数,ajax的回调函数,Promise的回调函数等),最好写成箭头函数,这样this的指向才是vm 或 组件实例对象
自己的一些小理解:
1.当一个需求watch能实现,计算属性也能够实现的时候,使用计算属性较方便,但是当面临一些异步的计算时,就要使用watch。
2.计算属性里面是不能够开启异步任务(比如像延迟执行代码)去维护数据的,它靠的是返回值返回数据;而watch是可以开启异步任务的,因为watch不靠返回值,它靠的是自己写的代码来修改。
3.这里的定时器函数setTimeout是一个箭头函数,它虽然是在Vue所管理的函数firstName中开启的,但是定时器所指定的回调是不受Vue控制,是浏览器定时器管理模块控制的,最后定时器到点了,也是JS引擎帮忙调用的定时器中的函数,不是Vue调用的。 如果选用普通函数,那么这里setTimeout中的this就指向的是window,因为定时器所指定的回调是JS帮忙调用的,那么在调用的时候this就已经指定好了是window;如果使用箭头函数,虽然也是JS引擎帮忙回调的里面的函数,但是使用的是箭头函数,所以它就没有了自己的this,没有自己的this,它就会向外找,就找到了firstName()的this,firstName是Vue管理的普通函数,它的this就是vm
firstName(newValue) {
//延迟一秒执行
setTimeout(() => {
this.fullName = newValue + '-' + this.lastName
}, 1000)
}