1. 什么是计算属性
我们己经可以搭建出一个简单的 Vue 应用,在模板中双向绑定一些数据或表达式了。但是表达式如果过长,或逻辑更为复杂时,就会变得臃肿甚至难以阅读和维护,如:
<div>
{{text.split(',').reverse().join(',')}}
</div>
上述表达式包含三个操作,并不是很清晰,所以在遇到复杂的逻辑时应该使用计算属性。
- 所有的计算属性都以函数的形式写在 Vue 实例内的
computed
选项内,最终返回计算后的结果。
2. 计算属性用法
-
在一个计算属性里可以完成各种复杂的逻辑,包括运算、函数调用等,只要最终返回一个结果就可以。除了上例简单的用法,计算属性还可以依赖多个 Vue 实例的数据,只要其中任一数据变化,计算属性就会重新执行,视图也会更新。
-
getter 和 setter 方法
每一个计算属性都包含一个getter
方法和一个setter
方法。
- 如果计算属性后面直接跟一个 function,使用的就是计算属性的默认方法
getter
来读取。例 展示两个购物车的物品总价:
computed: {
prices: function(){
var prices = 0
for(let i=0; i<this.package.length; i++){
prices += this.package[i].price * this.package[i].count
}
return prices
}
}
- 我们也可以在需要时使用
setter
函数 , 当手动修改计算属性的值就像修改一个普通数据那样时,就会触发setter
函数,执行一些自定义的操作。例 显示全名:
computed: {
fullName: {
get: function(){
return this.firstName + ' ' + this.lastName
},
set: function(newValue){
// 传进来的值用逗号分隔,如'Liu,Bei'
var names = newValue.split(',') // 分隔为数组
this.firstName = names[0]
this.lastName = names[1]
}
}
}
-
计算属性除了上述简单的文本插值外,还经常用于动态地设置元素的样式名称 class 和内联样式 style。
-
小技巧
计算属性还有两个很实用的小技巧容易被忽略:
1. 计算属性可以依赖其他计算属性;
2. 计算属性不仅可以依赖当前 Vue 实例的数据,还可以依赖其他实例的数据。
3. 计算属性缓存
计算属性缓存是定义在计算属性 computed
里的。
- 调用
methods
里的方法也可以与计算属性起到同样的作用。
- 页面中的方法: 如果是调用方法,只要页面重新渲染,方法就会重新执行;若不需要渲染,则不需要重新执行。
- 计算属性:不管是否渲染,只要计算属性依赖的数据(缓存)未发生变化,就永远不变。
- 结论
- 用计算属性可以实现的问题,在
methods
里定义一个方法也可以实现相同的效果,甚至该方法还可以接受参数,使用起来更灵活。 - 既然使用
methods
就可以实现,那么为什么还需要计算属性呢?因为计算属性是基于它的依赖缓存的,一个计算属性所依赖的数据发生变化时,它才会重新取值,所以text
只要不改变,计算属性也就不更新。
- 何时使用二者
- 使用计算属性还是
methods
取决于是否需要缓存,当遍历大数组和做大量计算时,应当使用计算属性,除非不希望得到缓存; - 当需要数据实时发生变化时,适合用
methods
。
网友评论