第六章 Vue计算属性之computed

目录

一、概述

二、computed简写的代码

三、computed简写的运行效果

四、computed完整写法

五、computed完整写法的代码

六、computed完整写法运行效果


一、概述

**概念:**computed基于现有的数据,计算出最终值。 如果依赖的数据发生变化,将自动重新计算。

语法:

① 声明在 computed 配置项中,一个计算属性对应一个函数

② 使用起来和普通属性一样使用 {{ 计算属性名 }}

注:计算属性 → 可以将一段 求值的代码 进行封装。

二、computed简写的代码

html 复制代码
<!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>骑行队公路车品牌统计清单</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: 4 },
          { id: 4, name: 'Cervelo S5', num: 7 }
        ]
      },
      computed: {
        totalCount () {
          // 基于现有的数据,编写求值逻辑
          // 计算属性函数的内部可以直接通过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>

三、computed简写的运行效果

四、computed完整写法

computed计算属性默认是简写,只能读取访问,不能 "修改"。

如果要 "修改" → 需要写计算属性的完整写法。

五、computed完整写法的代码

html 复制代码
<!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>
</head>
<body>

  <div id="app">
    姓<input type="text" v-model="lastName"><br>
    名:<input type="text" v-model="firstName"><br>
    <input type="text" v-model="fullName"><br>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        firstName: '哲晓',
        lastName: '王',
      },
      computed: {
        // 简写 -> 只有获取逻辑,没有设置/修改的逻辑
        // fullName () {
        //   return this.lastName + this.firstName
        // }

        // 完整写法 -> 获取 + 设置
        fullName: {
          // 当fullName计算属性被获取求值时,执行get(有缓存),会将返回值作为求值的结果
          get () {
            return this.lastName + this.firstName
          },
          // 当fullName计算属性被赋值修改时,执行set,修改的值传递给set方法的形参
          set (value) {
            this.firstName = value.slice(1)
            this.lastName = value.slice(0,1)
          }
        }
      }
    })
  </script>
</body>
</html>

六、computed完整写法运行效果

注:实际我们在项目开发过程中,遇到需要同时获取和修改的情况比较少,因此大部分情况下,简写就可以。

相关推荐
柒和远方4 分钟前
从审计日志到可下载证据包:事务型 Outbox、租约 fencing 与保留水位
前端·后端·架构
卓怡学长10 分钟前
w266基于spring boot + vue 圣地延安美食乐享系统
java·数据库·vue.js·spring boot·spring·intellij-idea
minglie131 分钟前
npm ali-oss库依赖冲突
前端·npm
CryptoPP1 小时前
BSE股票K线数据接入实战:从接口调用到前端图表展示
大数据·前端·网络·人工智能·websocket·网络协议
没落英雄3 小时前
5. 从零开始搭建一个 AI Agent —— 人机协作与中断恢复
前端·人工智能·架构
品尚公益团队3 小时前
C#在asp.net网页开发中的带cookie登录实现
前端·c#·asp.net
多加点辣也没关系4 小时前
JavaScript|第9章:对象 — 基础
开发语言·javascript·ecmascript
没有了遇见4 小时前
AI Agent 是什么?—— 一文理解 LLM、Memory、Skills、Tools、MCP、Workflow,Context
android·前端·程序员
用户83134859306984 小时前
Cesium自定义可调节星空夜景+星星闪烁
vue.js·cesium
后台开发者Ethan5 小时前
setState组件更新
前端·javascript·react