目录
一、computed 计算属性
1.1. 介绍
1.2. 代码
1.3. 运行效果
二、methods 方法
2.1. 介绍
2.2. 代码
2.3. 运行效果
三、总结
我们在项目开发过程中遇到需要进行计算的需求时,通过computed计算属性和methods方法均能实现,由此将带来一个问题,这两者的使用我们该如何选择?
一、computed 计算属性
1.1. 介绍
作用:封装了一段对于数据的处理,求得一个结果。
语法:
① 写在 computed 配置项中
② 作为属性,直接使用 → this.计算属性 {{ 计算属性 }}
缓存特性(提升性能):
计算属性会对计算出来的结果缓存,再次使用直接读取缓存;如果依赖项变化了,会自动重新计算 → 并再次缓存
1.2. 代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>table {border: 1px solid #000;text-align: center;width: 240px;}th,td {border: 1px solid #000;}h3 {position: relative;}</style>
</head>
<body><div id="app"><h3>骑行队公路车品牌统计清单<span>{{ totalCount }}</span></h3><h3>骑行队公路车品牌统计清单<span>{{ totalCount }}</span></h3><table><tr><th>品牌系列名</th><th>数量</th></tr><tr v-for="(item, index) in list" :key="item.id"><td>{{ item.name }}</td><td>{{ item.num }}辆</td></tr></table><!-- 目标:统计求和,求得公路车总数 --><p>公路车总数:{{ totalCount }} 个</p></div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {// 现有的数据list: [{ id: 1, name: '崔克马东9', num: 6 },{ id: 2, name: '闪电SL8', num: 2 },{ id: 3, name: '梅花C68', num: 5 },{ id: 4, name: 'Cervelo S5', num: 7 }]},computed: {totalCount () {console.log('公路车总数统计')// 基于现有的数据,编写求值逻辑// 计算属性函数的内部可以直接通过this访问到app实例 this.list// 需求:对 this.list数组里面的num进行求和(使用到reduce函数),其中sum为总和item为元素项0为起始总和赋值给sumlet total = this.list.reduce((sum, item) => sum + item.num, 0)return total}}})</script>
</body>
</html>
1.3. 运行效果
我们可以看到,代码中我们进行了三次总数计算,但是控制台中计算的方法只执行了一次(只输出一条日志),这就是因为computed计算属性的缓存特性。

二、methods 方法
2.1. 介绍
作用:给实例提供一个方法,调用以处理业务逻辑。
语法:
① 写在 methods 配置项中
② 作为方法,需要调用 → this.方法名( ) {{ 方法名() }} @事件名="方法名"
不提供缓存的特性
2.2. 代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>table {border: 1px solid #000;text-align: center;width: 240px;}th,td {border: 1px solid #000;}h3 {position: relative;}</style>
</head>
<body><div id="app"><h3>骑行队公路车品牌统计清单<span>{{ totalCountFn() }}</span></h3><h3>骑行队公路车品牌统计清单<span>{{ totalCountFn() }}</span></h3><table><tr><th>品牌系列名</th><th>数量</th></tr><tr v-for="(item, index) in list" :key="item.id"><td>{{ item.name }}</td><td>{{ item.num }}辆</td></tr></table><!-- 目标:统计求和,求得公路车总数 --><p>公路车总数:{{ totalCountFn() }} 个</p></div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {// 现有的数据list: [{ id: 1, name: '崔克马东9', num: 6 },{ id: 2, name: '闪电SL8', num: 2 },{ id: 3, name: '梅花C68', num: 5 },{ id: 4, name: 'Cervelo S5', num: 7 }]},methods: {totalCountFn () {console.log('公路车总数统计method')let total = this.list.reduce((sum, item) => sum + item.num, 0)return total}},computed: {totalCount () {console.log('公路车总数统计')// 基于现有的数据,编写求值逻辑// 计算属性函数的内部可以直接通过this访问到app实例 this.list// 需求:对 this.list数组里面的num进行求和(使用到reduce函数),其中sum为总和item为元素项0为起始总和赋值给sumlet total = this.list.reduce((sum, item) => sum + item.num, 0)return total}}})</script>
</body>
</html>
2.3. 运行效果
我们可以看到,总数计算方法执行了三次,methods方法的执行不提供缓存的特性。
三、总结
computed计算属性更加侧重于处理数据、获取结果,而且它可以对结果进行缓存;methods方法更加侧重于提供业务逻辑。