Vue学习----第二天_计算属性【5.31】

一、什么是计算属性

在这里插入图片描述
代码如下:

<div id='app'>
    <h2>{{firstName + ' ' + lastName}}</h2>
    <h2>{{firstName}} {{lastName}}</h2>
    <!-- 通过methods函数拼接 -->
    <h2>{{getFullName()}}</h2>
    <!-- 通过conputed计算属性 -->
    <h2>{{fullName}}</h2>
  </div>

  <script src='./js/vue.js'></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        firstName: '小明',
        lastName: '小红'
      },
      methods: {
        getFullName() {
          return this.firstName + ' ' + this.lastName
        }
      },
      computed: {
        fullName() {
          return this.firstName + ' ' + this.lastName
        }
      }
    })
  </script>

效果如下:
在这里插入图片描述

二、计算属性的复杂操作

代码如下:

<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: 'unix', price: 119 },
          { id: 111, name: '代码大全', price: 105 },
          { id: 112, name: '深入理解计算机原理', price: 111 },
          { id: 113, name: '现在操作系统', price: 119 }
        ]
      },
      computed: {
        // filter/map/reduce
        totalPrice() {
          let result = 0
          for (let i = 0; i<this.books.length; i++) {
            return result += this.books[i].price
          }
        }
      }
    })
  </script>

效果如下:
在这里插入图片描述

三、计算属性的setter和getter

在这里插入图片描述
注意: 计算属性一般是没有set方法,为只读属性
代码如下:

<div id='app'>
    <h2>{{fullName}}</h2>
  </div>

  <script src='./js/vue.js'></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        message: '你好',
        firstName: '小明',
        lastName: '小红',
        
      },
      computed: {
        // 计算属性一般是没有set方法,为只读属性
        fullName: {
          set: function(newValue) {
            // console.log(newValue)
            const names = newValue.split(' ')
            this.firstName = names[0]
            this.lastName = names[1]
          },
          get: function() {
            return this.firstName + ' ' + this.lastName
          }
        }
        // fullName() {
        //   return this.firstName + ' ' + this.lastName
        // }
      }
    })
  </script>

效果如下:
在这里插入图片描述

四、计算属性和methods对比

在这里插入图片描述
同样情况下,优先使用computed,因为计算属性中有缓存,可以减少不必要的计算

1.计算属性

关闭计算属性中缓存:cache:false
代码如下:

<div id='app'>
    <!-- 1.直接拼接:语法过于繁琐 -->
    <h2>{{firstName}} {{lastName}}</h2>

    <!-- 2.通过methods函数 -->
    <!-- <h2>{{getFullName()}}</h2>

    <!-- 3.通过computed计算属性 -->
    <h2>{{fullName}}</h2>
    <h2>{{fullName}}</h2>
    <h2>{{fullName}}</h2>
    <h2>{{fullName}}</h2>
  </div>

  <script src='./js/vue.js'></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        message: '你好',
        firstName: '小明',
        lastName: '小红',
      },
      computed: {
        fullName() {
          console.log('computed')
          return this.firstName + ' ' + this.lastName
        }
      }
    })
  </script>

效果如下:
打印4次,但是执行一次computed
在这里插入图片描述

2.methods

代码如下:

<div id='app'>
    <!-- 1.直接拼接:语法过于繁琐 -->
    <h2>{{firstName}} {{lastName}}</h2>

    <!-- 2.通过methods函数 -->
    <h2>{{getFullName()}}</h2>
    <h2>{{getFullName()}}</h2>
    <h2>{{getFullName()}}</h2>
    <h2>{{getFullName()}}</h2>

    <!-- 3.通过computed计算属性 -->
    <!-- <h2>{{fullName}}</h2> -->
  </div>

  <script src='./js/vue.js'></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        message: '你好',
        firstName: '小明',
        lastName: '小红',
      },
      methods: {
        getFullName() {
          console.log('methods')
          return this.firstName + ' ' + this.lastName
        }
      }
    })
  </script>

效果如下:
打印4次,但是执行4次methods,消耗内存大在这里插入图片描述
内容持续更新中…
lvan学习笔记-文章内容仅个人观点
2020.5.31

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值