程序员社区

计算属性

1.简单使用

在某些情况下,我们需要对数据进行转化之后再显示
我们就要用到计算属性
这个属性是写在实例的computed选项中的

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Title</title>
</head>
<body>
<div id="app">
<!--  代码不简洁-->
  <h2>{{firstName}} {{lastName}}</h2>
  <h2>{{firstName + ' ' + lastName}}</h2>
<!--  利用计算属性-->
  <h2>{{fullName}}</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    data:{
      firstName: 'Bill',
      lastName: 'Gates',
    },
    computed: {
      fullName : function () {
        return this.firstName + ' ' + this.lastName;
      }
    }
  })
</script>
</body>
</html>

2.复杂操作

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Title</title>
</head>
<body>
<div id="app">
  <h2>总价:{{totalPrice}}</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    data:{
      books: [
        {id: 110, name: '计算机操作系统', price: 119},
        {id: 111, name: '计算机组成原理', price: 69},
        {id: 112, name: '数据结构', price: 88},
        {id: 113, name: '代码大全', price: 39},
      ]
    },
    computed: {
      totalPrice: function () {
        let result=0;
        for(let i in this.books)
          result += this.books[i].price;
        return result;
      }
    }
  })
</script>
</body>
</html>

在这里插入图片描述

3.计算属性的getter和setter

上面的计算属性fullname的写法是简写
下面的是完整的写法

//计算属性一般是没有set方法,只读属性
      fullName: {
        set: function(){
          
        },
        get: function () {
          return this.firstName + ' ' + this.lastName
        }
      }

4.计算属性和method的对比

虽然也可以用methods来做

<h2>{{getFullName()}}</h2>
...
methods: {
      getFullName: function () {
        return this.firstName + ' ' + this.lastName
      }
    }

但是用computed的好处在于:
computed在Vue中是有缓存的,体现在如果我现在要显示多个相同的fullname

<h2>{{getFullName()}}</h2>
<h2>{{getFullName()}}</h2>
<h2>{{getFullName()}}</h2>
<h2>{{getFullName()}}</h2>

使用methods的话,会调用多次方法
而使用computed的话,只需要调用一次,因为它有缓存,发现每次显示的都一样就不再调用了。

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 计算属性

一个分享Java & Python知识的社区