您的位置:首页 > Web前端 > Vue.js

vue中计算属性和过滤器的区别和用法

2020-07-14 05:12 1236 查看

首先来看一个例子:
已知数学成绩和语文成绩,要求他们的平均值
这里可以使用的方法很多:

  • 在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、过滤器相当于定义一个特殊的方法

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: