computed方法在Vue中是一个很重要的概念,可以说它是Vue框架中的精华之一。computed方法是一个可以根据已有的数据动态计算得出结果的方法,这种方法可以有效地避免代码的冗余,提高代码的可读性和可维护性。
// 一个计算商品的总价的例子 computed: { totalPrice: function () { var result = 0; for (var i = 0; i< this.goodsList.length; i++) { result += this.goodsList[i].price * this.goodsList[i].quantity; } return result; } }
计算属性的基本用法就是在Vue组件中定义一个computed对象,然后在其中定义一个函数,函数的返回值就是新的计算的值,该函数只有在被依赖的数据变化时才会重新计算,这样可以避免不必要的计算。计算属性是基于依赖关系缓存的,当计算属性所依赖的数据变化时才会重新计算,否则直接返回缓存中的值。
与computed属性相同的还有watch属性,watch属性是用来监听数据的变化,当有数据变化时就会执行相应的函数,一旦有数据变化,它就会触发一个回调函数,然后该函数可以进行一些异步操作,例如服务端请求、更新视图等等。
// 一个watch函数的例子 watch: { 'counter': function (newVal, oldVal) { console.log('Counter changed from ' + oldVal + ' to ' + newVal); } }
虽然watch属性和computed属性的作用都是根据响应式数据的变化动态计算出新的值,但是他们的主要区别在于计算属性会缓存计算结果,而watch函数则不会,当监听到数据变化时,watch函数总是需要进行重新计算。
总体而言,在对Vue组件进行数据处理的时候,应该优先考虑使用computed属性,因为计算属性的代码相对来说更容易理解、维护和优化。只有在一些特殊情况下才会去使用watch属性计算数据,当需要执行异步操作或者需要判断更加复杂的逻辑时,watch属性比computed属性要更加的灵活和方便。