赞
踩
基于现有的数据,计算出来的新属性。 依赖的数据变化,自动重新计算。
声明在 computed 配置项中,一个计算属性对应一个函数
使用起来和普通属性一样使用 {{ 计算属性名}}
computed配置项和data配置项是同级的
computed中的计算属性虽然是函数的写法,但他依然是个属性
computed中的计算属性不能和data中的属性同名
使用computed中的计算属性和使用data中的属性是一样的用法
computed中计算属性内部的this依然指向的是Vue实例
比如我们可以使用计算属性实现下面这个业务场景
- <!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: '篮球', num: 3 },
- { id: 2, name: '玩具', num: 2 },
- { id: 3, name: '铅笔', num: 5 },
- ]
- },
- computed: {
- totalCount () {
- // 基于现有的数据,编写求值逻辑
- // 计算属性函数内部,可以直接通过 this 访问到 app 实例
- // console.log(this.list)
-
- // 需求:对 this.list 数组里面的 num 进行求和 → reduce
- let total = this.list.reduce((sum, item) => sum + item.num, 0)
- return total;
- }
- }
- })
- </script>
- </body>
- </html>

作用:封装了一段对于数据的处理,求得一个结果
语法:
写在computed配置项中
作为属性,直接使用
js中使用计算属性: this.计算属性
模板中使用计算属性:{{计算属性}}
作用:给Vue实例提供一个方法,调用以处理业务逻辑。
语法:
写在methods配置项中
作为方法调用
js中调用:this.方法名()
模板中调用 {{方法名()}} 或者 @事件名=“方法名”
缓存特性(提升性能)
计算属性会对计算出来的结果缓存,再次使用直接读取缓存,
依赖项变化了,会自动重新计算 → 并再次缓存
methods没有缓存特性
通过代码比较
- <!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: 300px;
- }
- th,td {
- border: 1px solid #000;
- }
- h3 {
- position: relative;
- }
- span {
- position: absolute;
- left: 145px;
- top: -4px;
- width: 16px;
- height: 16px;
- color: white;
- font-size: 12px;
- text-align: center;
- border-radius: 50%;
- background-color: #e63f32;
- }
- </style>
- </head>
- <body>
-
- <div id="app">
- 推荐阅读
相关标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。