大数跨境

Vue 计算属性

Vue 计算属性 慧测
2021-08-28
2
导读:关注性能小课,成长不止一点点1、定义 使用vue做前端开发,在模板中可以直接通过插值语法显示data中的数据

关注性能小课,成长不止一点点



1、定义

使用vue做前端开发,在模板中可以直接通过插值语法显示data中的数据,但某些f复杂情况下,我们可能需要对数据进行一些转化后再显示、或者需要将多个数据结合起来进行显示:

  • 比如我们有firstNamelastName两个变量,我们需要显示完整的形成
  • 但是如果多个地方都需要显示完整的名称,我们就需要写多个 {{firstName}}{{lastName}}

所以在遇到复杂逻辑时应该使用计算属性。计算属性都是以函数的形式写在vue示例内的 computed选项内,最终返回计算后的结果。

可以理解为在vuecomputed就是计算属性,主要作用是把数据存储到内存中,减少不必要的请求,还可以利用computed给子组件的data赋值。

2、一个简单计算属性

示例:

<template>
  <div class="CalculationProperties">

    <span>商品数量:{{count}} 个</span>
    <el-input v-model="count" placeholder="请输入内容"></el-input>
    <span>商品单价:{{unitPrice}} 元</span>
    <el-input v-model="unitPrice" placeholder="请输入内容"></el-input>

    <h1>方法一、通过方法计算</h1>
    <h1>商品总价:{{totalPrice()}} 元</h1>

    <h1>方法二、简单计算属性</h1>
    <h1>商品总价:{{totalPriceOne}} 元</h1>
  </div>
</template>

<script>
export default {
  name: 'calculationProperties',
  data () {
    return {
      msg: '计算属性',
      count: 10,
      unitPrice: 24
    }
  },

  methods: {
    totalPrice () {
      return this.count * this.unitPrice
    }
  },

  computed: {
    totalPriceOne () {
      return this.count * this.unitPrice
    }
  }
}
</script>

我们定义了一个计算属性 totalPriceOne,它的返回值是商品的单价和数量相乘得到的总价,在 html 模板中,我们直接用插值表达式 {{ totalPrice }} 来获得商品的总价,然后渲染到页面上。

计算属性的值会根据其函数内部依赖的变化而重新计算。也就是说,在上面的例子中当 countunitPrice 有任意一方发生改变时 totalPrice 都会随之更新。

3、Getter 和 Setter

每一个计算属性都包含一个 getter 和一个 setter,我们上面的两个示例都是计算属性的默认用法,只是利用了 getter 来读取。在你需要时,也可以提供一个 setter函数 , 当手动修改计算属性的值就像修改一个普通数据那样时,就会触发 setter函数,执行一些自定义的操作。

4、计算属性 VS 方法区别

如果不使用计算属性,在 methods 里定义了一个方法,也可以实现相同的效果,甚至该方法还可以接受参数,使用起来更灵活。

既然 methods 同样可以解决模板中复杂逻辑计算的问题,那么为什么还需要使用计算属性呢? 原因就是:计算属性是基于它的依赖缓存的。前面我们介绍过,计算属性的改变取决于其所依赖数据的变化,所以只要依赖数据不发生改变,计算属性就不会更新。当我们重复获取计算属性时它也不会重复计算,只会获取缓存的值。而我们每次调用 methods 都会重新计算一遍,这样将会消耗一部分性能。当然,如何你不希望对数据进行缓存,那么可以用方法来代替。

5、总结

  • 通过计算属性 computed 来代替在模板编写复杂逻辑的使用方法。
  • 如何利用 setter 和 getter 来编写一个复杂的计算属性。
  • 对比了计算属性和方法的区别:计算属性是有缓存的而方法每次都会重新执行。

END

免费技术支持微信:15712862196

咨询QQ:2657535456

咨询微信号:huice666

慧测公众号



【声明】内容源于网络
0
0
慧测
专注人工智能前沿技术落地企业实战应用
内容 404
粉丝 0
慧测 专注人工智能前沿技术落地企业实战应用
总阅读104
粉丝0
内容404