计算属性computed

1、使用场景

用于处理不能直接展示在前端的数据

2、和method的区别

computed有缓存,如果data里面的数据不改变,就直接读取缓存,不会多次执行消耗性能

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<script src="../js/vue.js"></script>
<div id="app">
  <span>{{totalPrice}}</span>
  <span>{{totalPrice}}</span>
  <span>{{totalPrice}}</span>
  <span>{{totalPrice}}</span>
  <span>{{getTotalPrice()}}</span>
  <span>{{getTotalPrice()}}</span>
  <span>{{getTotalPrice()}}</span>
  <span>{{getTotalPrice()}}</span>
</div>
<script>
  const app = new Vue({
    el: "#app",
    data: {
      books:[
        {name: 'B1', price: 56},
        {name: 'B2', price: 45},
        {name: 'B3', price: 73},
        {name: 'B4', price: 25}
      ]
    },
    computed: {
      totalPrice() {
        console.log('进入了computed')
        let price = 0
        for (index in this.books) {
          price += this.books[index].price
        }
        return price
      }
    },
    methods: {
      getTotalPrice: function() {
        console.log('进入了方法')
        let price = 0
        for (book in this.books) {
          price += book.price
        }
        return price
      }
    }
  })
</script>

</body>
</html>

会发现方法执行了多次,computed执行了一次

3、set方法

默认computed只是有get方法,也可以定义一个对象,包含两个key,一个是set,一个是get

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<script src="../js/vue.js"></script>
<div id="app">{{message}}
  <span>firstName: {{firstName}}</span>
  <span>lastName: {{lastName}}</span>
  <span>全名:{{fullName}}</span>
  <button @click="setTestData()">改变</button>
</div>
<script>
  const app = new Vue({
    el: "#app",
    data: {
      message: '你好啊',
      firstName: 'Cheng',
      lastName: 'Vivien'
    },
    methods: {
      setTestData() {
        this.fullName = 'hello beier'
      }
    },
    computed: {
      fullName: {
        get () {
          return this.firstName + ' ' + this.lastName
        },
        set(val) {
          let names = val.split(' ')
          this.firstName = names[0]
          this.lastName = names[1]
        }
      }
    }
  })
</script>

</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值