vue中计算属性和过滤器的区别和用法
首先来看一个例子: 已知数学成绩和语文成绩,要求他们的平均值 这里可以使用的方法很多:
-
在methods()里面计算; 在computed()里面计算; 在filter()里面计算
<template>
<div>
<div>平均值1:{
{
avarage1 }}</div>
<div>平均值2:{
{
avarage2 }}</div>
<div>平均值3:{
{
math | avarage3(chinese) }}</div>
</div>
</template>
<script>
export default {
filters: {
avarage3: function(math, chinese) {
return (math + chinese) / 2
}
},
data() {
return {
math: 95,
chinese: 86,
avarage1: null
}
},
computed: {
avarage2: function() {
return (this.math + this.chinese) / 2
}
},
mounted() {
this.avarage()
},
methods: {
avarage: function() {
this.avarage1 = (this.math + this.chinese) / 2
}
}
}
</script>
很明显,这三种方式都可以算出平均值
然后我们再看一个例子 假设有一45名学生,我们需要计算出每一个人成绩的平均值 这个时候,计算属性就不那么合适了,因为计算属性相当于是定义了一个变量,在这种需要较多的时候并不合适 那么我们还可以使用methods和filters methods计算的话是需要循环计算结果 filters计算则是在需要计算的位置进行调用 相比之下filters计算更好
<template>
<div>
<div v-for="(item, index) in grade" :key="index">学生{
{
index + 1 }}: {
{
item.math | avarage3(item.chinese) }}</div>
</div>
</template>
<script>
export default {
filters: {
avarage3: function(math, chinese) {
return (math + chinese) / 2
}
},
data() {
return {
grade: [{
math: 95,
chinese: 86
}, {
math: 45,
chinese: 76
}, {
math: 84,
chinese: 86
}, {
math: 63,
chinese: 53
}, {
math: 75,
chinese: 68
}, {
math: 99,
chinese: 89
}]
}
}
}
</script>
最后,我们来对比一下计算属性和过滤器的区别
计算属性 1、计算属性适合用在单个属性的计算; 2、计算属性只能在单个vue实例中使用; 3、计算属性不能接收参数,只能使用data中定义的变量进行计算; 4、计算属性有缓存机制,可减少调用次数; 5、计算属性相当于定义一个变量
过滤器 1、过滤器适合多个同样计算方法的属性的计算; 2、过滤器可以定义为全局过滤器,在多个vue实例中使用; 3、过滤器可以接收多个参数进行计算; 4、过滤器没有缓存机制,每调用一次都会计算一次; 5、过滤器相当于定义一个特殊的方法
