程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Vue2

    • Vue简介
    • Vue 基础使用
    • Vue的基础指令
    • 过滤器(Filters)
    • 侦听器(Watch)
    • 计算属性(computed)
      • 1. 什么是计算属性
      • 2. 计算属性的特点
      • 3. 如何声明计算属性
      • 4. 计算属性的使用注意点
      • 5. 计算属性 vs 方法
    • vue-cli
    • vue.config.js配置
    • Vue组件
    • 生命周期和数据共享
    • Vue 组件实例与数据代理 (this)
    • $refs 引用
    • 动态组件
    • 插槽 (Slots)
    • 混入 (Mixin)
    • 自定义指令 (directives)
    • 插件 (Plugins)
    • 初识Vue-router
    • Vue-router的常见用法
  • Vue3

  • vue3 + TS 项目集成

  • Vue全家桶
  • Vue2
scholar
2024-07-30
目录

计算属性(computed)

# 计算属性(computed)

# 1. 什么是计算属性

计算属性(Computed Properties)是 Vue 提供的一种特性,允许开发者定义依赖其他数据的动态属性。计算属性的值是通过计算得出的,并且可以在模板中使用。示例代码如下:

new Vue({
  el: '#app', // 绑定 Vue 实例的根元素
  data: {
    firstName: 'John', // 定义 firstName 数据
    lastName: 'Doe' // 定义 lastName 数据
  },
  computed: {
    // 定义一个计算属性 fullName,依赖于 firstName 和 lastName
    fullName() {
      return this.firstName + ' ' + this.lastName; // 返回拼接后的全名
    }
  }
});
1
2
3
4
5
6
7
8
9
10
11
12
13

在上面的代码中,fullName 是一个计算属性,它依赖于 firstName 和 lastName,并通过它们计算出全名。

# 2. 计算属性的特点

  • 属性本质:虽然计算属性在声明时是定义为方法的,但它的本质是一个属性。
  • 缓存机制:计算属性会缓存计算结果,只有当依赖的数据发生变化时,才会重新计算。这使得计算属性的性能优于每次都重新计算的方法。
  • 自动更新:计算属性会自动监听其依赖的数据,当依赖的数据变化时,计算属性会自动更新,确保数据一致性。

# 3. 如何声明计算属性

计算属性是在 Vue 实例的 computed 选项中定义的。每个计算属性都是一个方法,返回一个值,该值可以依赖于其他数据属性。

new Vue({
  el: '#app', // 绑定 Vue 实例的根元素
  data: {
    a: 1, // 定义 a 数据
    b: 2 // 定义 b 数据
  },
  computed: {
    // 定义一个计算属性 sum,依赖于 a 和 b
    sum() {
      return this.a + this.b; // 返回 a 和 b 的和
    }
  }
});
1
2
3
4
5
6
7
8
9
10
11
12
13

在上面的代码中,sum 是一个计算属性,它依赖于 a 和 b,并计算出它们的和。

# 4. 计算属性的使用注意点

  • 必须定义在 computed 节点中:计算属性只能在 Vue 实例的 computed 选项中定义。
  • 必须是一个函数:每个计算属性都是一个方法,返回一个值。
  • 必须有返回值:计算属性的方法必须返回一个值,这个值将被 Vue 用作属性的值。
  • 当做普通属性使用:计算属性在模板中使用时,就像普通的属性一样,不需要加括号调用。


 











 






<div id="app">
    <!-- 直接使用计算属性 fullName,就像普通属性一样 -->
    <p>{{ fullName }}</p>
</div>

<script>
    new Vue({
        el: '#app', // 绑定 Vue 实例的根元素
        data: {
            firstName: 'John', // 定义 firstName 数据
            lastName: 'Doe' // 定义 lastName 数据
        },
        computed: {
            // 定义一个计算属性 fullName,依赖于 firstName 和 lastName
            fullName() {
                return this.firstName + ' ' + this.lastName; // 返回拼接后的全名
            }
        }
    })
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

在上面的代码中,fullName 计算属性在模板中使用时不需要加括号调用。

# 5. 计算属性 vs 方法

  • 计算属性的缓存:计算属性会缓存结果,只有当依赖的数据发生变化时才会重新计算。而方法每次调用都会重新计算,不会缓存结果。
  • 性能优势:由于计算属性的缓存机制,当依赖数据没有变化时,计算属性的性能更好,因为它不需要每次都重新计算。
new Vue({
  el: '#app', // 绑定 Vue 实例的根元素
  data: {
    message: 'Hello' // 定义 message 数据
  },
  computed: {
    // 定义一个计算属性 reversedMessage,返回 message 的反转字符串
    reversedMessage() {
      return this.message.split('').reverse().join(''); // 返回反转后的字符串
    }
  },
  methods: {
    // 定义一个方法 reverseMessage,返回 message 的反转字符串
    reverseMessage() {
      return this.message.split('').reverse().join(''); // 返回反转后的字符串
    }
  }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

在上面的代码中,reversedMessage 是一个计算属性,而 reverseMessage 是一个方法。两者都实现了相同的功能,但计算属性 reversedMessage 会缓存结果,而方法 reverseMessage 每次调用都会重新计算。

总结

计算属性是 Vue 提供的一种特性,允许开发者定义依赖其他数据的动态属性。计算属性的值通过计算得出,并且可以在模板中使用。计算属性具有缓存机制,只有当依赖的数据发生变化时才会重新计算,因此在性能上优于每次都重新计算的方法。计算属性适用于需要依赖多个数据并返回单一结果的情况。

编辑此页 (opens new window)
上次更新: 2025/01/30, 23:55:43
侦听器(Watch)
vue-cli

← 侦听器(Watch) vue-cli→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式