第七章 Vue之computed计算属性与methods方法对比

目录

一、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为起始总和赋值给sum
          let 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为起始总和赋值给sum
          let total = this.list.reduce((sum, item) => sum + item.num, 0)
          return total
        }
      }
    })
  </script>
</body>
</html>

2.3. 运行效果

我们可以看到,总数计算方法执行了三次,methods方法的执行不提供缓存的特性。

三、总结 

computed计算属性更加侧重于处理数据、获取结果,而且它可以对结果进行缓存;methods方法更加侧重于提供业务逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值