参考https://www.cnblogs.com/penghuwan/p/7194133.html
methods和watch/computed比较
作用机制上
1.watch和computed都是以Vue的依赖追踪机制为基础的,它们都试图处理这样一件事情:当某一个数据(称它为依赖数据)发生变化的时候,所有依赖这个数据的“相关”数据“自动”发生变化,也就是自动调用相关的函数去实现数据的变动。
2.对methods:methods里面是用来定义函数的,很显然,它需要手动调用才能执行。而不像watch和computed那样,“自动执行”预先定义的函数
【总结】:methods里面定义的函数,是需要主动调用的,而和watch和computed相关的函数,会自动调用,完成我们希望完成的作用
watch和computed的对比
处理场景
1.watch擅长处理的场景:一个数据影响多个数据
watch: { firstName: function (val) { this.fullName = val + this.lastName } }
firstName影响fullName 的值
2.computed擅长处理的场景:一个数据受多个数据影响
computed:{ fullName: function () { return this.firstName + lastName } }
fullName收到firstName,lastName变量影响
相比于watch/computed,methods不处理数据逻辑关系,只提供可调用的函数
利用computed处理methods存在的重复计算情况
1.methods里面的函数就是一群“耿直Boy”,如果有其他父函数调用它,它会每一次都“乖乖”地执行并返回结果,即使这些结果很可能是相同的,是不需要的
2.而computed是一个“心机Boy”,它会以Vue提供的依赖追踪系统为基础,只要依赖数据没有发生变化,computed就不会再度进行计算
【注意】computed的对象最好是依赖型数据(放在data等对象下的实例数据),否则computed只提供了缓存的值,而没有重新计算