关于vue中计算属性computed的详细讲解

当我们在Vue中使用数据时,有时我们需要对它做一些逻辑上的处理,例如对数据进行格式化、过滤和计算等。在这种情况下,我们通常可以使用计算属性(computed)来进行处理。

计算属性(computed)是什么

计算属性是Vue提供的一种数据计算的方式,是一个简化版的方法,可以轻松适应许多情况下的数据处理。计算属性是基于依赖进行缓存的,只有它所依赖的数据发生了变化,它才会重新计算,否则就会直接使用缓存已有的结果,从而提高应用的性能。

计算属性的定义方式是在Vue实例的计算属性中添加一个函数,这个函数就是这个计算属性的处理逻辑代码,例如:

new Vue({
  data: {
    message: 'Hello World'
  },
  computed: {
    reversedMessage: function () {
      return this.message.split('').reverse().join('')
    }
  }
})

在这个例子中,我们定义了一个计算属性reversedMessage,它的逻辑是将data中的message属性利用split()reverse()join()方法反转,最后返回反转后的结果。

计算属性(computed)和方法(method)的区别

计算属性和普通的方法虽然看起来很像,但是在Vue中,它们是有区别的。

第一个区别是:计算属性是基于依赖的缓存,只有它所依赖的数据发生了变化,它才会重新计算,否则就会直接使用缓存已有的结果;而方法则是每次调用时都会重新计算。

第二个区别是:当你使用计算属性时,在模板中直接引用计算属性,Vue会自动将其缓存起来。而使用方法时,每次调用都会执行方法,所以计算属性的性能会更高一些。

第三个区别是:当需要响应某些数据的变化时,我们应该使用计算属性。而当需要进行一些业务逻辑或者事件处理时,我们则应该使用方法。

计算属性(computed)示例

接下来,我们通过两个示例来深入掌握Vue中的计算属性。

示例一:温度转换

在这个示例中,我们需要实现一个温度的转换器,将摄氏温度转换为华氏温度。

温度转换公式是:F = C x 1.8 + 32,华氏温度 = 摄氏温度 * 1.8 + 32。

假设我们已经有了一个输入框绑定的数据celsius,我们现在需要实现一个计算属性,将它转换为华氏温度。

<template>
  <div>
    <input v-model="celsius">
    <p>摄氏温度: {{ celsius }}</p>
    <p>华氏温度: {{ fahrenheit }}</p>
  </div>
</template>

<script>
  export default {
    data () {
      return {
        celsius: 0
      }
    },
    computed: {
      fahrenheit: function () {
        return (this.celsius * 1.8 + 32).toFixed(2)
      }
    }
  }
</script>

在这个例子中,我们定义了一个数据celsius,并将其绑定在了一个输入框上。我们同时定义了一个计算属性fahrenheit,它的值就是将celsius转换为华氏温度的结果,它利用了计算属性的特性,只有在celsius变化时,它才会重新计算,从而提高了应用的性能。

示例二:购物车总价

在这个示例中,我们需要实现一个购物车的功能,用户可以添加商品、删除商品和修改商品数量,并且需要实时计算购物车的总价。

假设我们已经定义了一个用于渲染购物车的组件CartItem,它接受两个参数bookcountbook表示书籍信息,count表示该书籍数量。

我们需要定义一个计算属性,用来计算购物车的总价。

<template>
  <div>
    <CartItem v-for="(item, index) in cart" :key="index" :book="item.book" :count="item.count"/>
    <div>
      <p>总价:{{ totalPrice }}</p>
    </div>
  </div>
</template>

<script>
  import CartItem from './CartItem.vue'

  export default {
    components: {
      CartItem
    },
    data () {
      return {
        cart: [
          {
            book: {
              name: 'Vue权威指南',
              price: 98
            },
            count: 1
          },
          {
            book: {
              name: 'JavaScript高级程序设计',
              price: 88
            },
            count: 3
          }
        ]
      }
    },
    computed: {
      totalPrice: function () {
        let price = 0
        for (let i = 0; i < this.cart.length; i++) {
          price += this.cart[i].book.price * this.cart[i].count
        }
        return price
      }
    }
  }
</script>

在这个例子中,我们定义了一个数据cart,它表示购物车中的商品信息。我们同时定义了一个计算属性totalPrice,它的值就是购物车中所有商品的价格之和。它通过遍历cart数组,计算出每个商品的价格,最后累加得到购物车的总价。同样的,计算属性totalPrice会基于依赖的缓存,只有cart发生改变,它才会重新计算。

总结

通过以上两个示例,我们可以看出,计算属性确实是一个非常方便的数据计算方式,可以解决许多简单场景的数据处理问题。在Vue开发中,我们应该多加利用计算属性,从而提升应用的性能和开发效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于vue中计算属性computed的详细讲解 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • VUE +Element 实现多个字段值拼接功能

    下面是关于“VUE +Element 实现多个字段值拼接功能”的完整攻略: 1. 确认需求 在进行编码前,我们需要先明确要实现的功能。根据需求,我们需要实现一个多个字段值拼接的功能,要求: 用户可以选择要拼接的字段; 拼接后的结果应该可以复制到剪贴板中; 支持对拼接字段的顺序进行调整。 2. 安装 Element 接下来,我们需要安装 Element。在 V…

    Vue 2023年5月29日
    00
  • vue3.0 CLI – 1 – npm 安装与初始化的入门教程

    Vue3.0 CLI – 1 – npm 安装与初始化的入门教程 什么是 Vue CLI Vue CLI 是一个官方发布的 Vue.js 项目脚手架,提供了快速初始化项目、快速开发等功能,大大提高了前端开发效率。Vue CLI 内置了许多插件和功能,例如代码格式化、组件生成、调试等,同时也允许用户在创建项目时选择需要的插件和功能,定制自己的项目模版。 安装 …

    Vue 2023年5月28日
    00
  • Vue组件间数据传递的方式(3种)

    Vue组件间数据传递的方式有以下三种: 1. props 与 events 使用props将数据从父组件传递到子组件,使用events将数据从子组件传递到父组件。 父组件传递数据给子组件 在父组件中,可以通过在子组件中使用props属性传递数据。props属性是一个数组,其中包含子组件中要接收的属性名。 <template> <div&gt…

    Vue 2023年5月28日
    00
  • 为什么vue中不建议使用空字符串作为className

    在Vue中使用类名时,应尽量避免空字符串作为类名,以下是原因及解决方案: 1. 空字符串无法清除类名 在Vue中使用 v-bind:class 绑定类名时,空字符串会被视为有效的类名。当我们通过更改 data 中的属性值来更改类名时,空字符串也会作为一个类名被添加。但是,一旦添加上了空字符串,就无法通过更改该属性值来清除这个空字符串类名。 示例代码: &lt…

    Vue 2023年5月27日
    00
  • 何时/使用 Vue3 render 函数的教程详解

    关于“何时/使用 Vue3 render 函数的教程详解”的完整攻略,我会分为以下几个方面进行讲解: render函数是什么以及何时使用render函数 render函数的参数和返回值 如何编写render函数以及实例演示 vue3 render函数在自定义组件中的应用实例演示 下面我会详细阐述每个方面的内容。 1. render函数是什么以及何时使用ren…

    Vue 2023年5月29日
    00
  • 详解vue2.0组件通信各种情况总结与实例分析

    详解vue2.0组件通信各种情况总结与实例分析 在Vue的组件化开发中,不同组件之间的通信是非常常见的需求。Vue提供了多种方式来实现组件之间的通信,根据使用场景和需求的不同,我们可以选择不同的方式。下面我们分别来详细讲解这些通信方式及其使用场景。 组件通信方式 父子组件通信 父子组件通信是最为常见的一种组件通信方式,在父组件内部渲染子组件,子组件接受父组件…

    Vue 2023年5月27日
    00
  • 简单谈一谈Vue中render函数

    当我们通过模板来渲染Vue组件时,Vue框架内部会将其编译成render函数执行。而render函数是Vue中的核心函数,我们可以自己手动编写render函数来实现更加灵活的渲染效果。 一、render函数基础 1.1 什么是render函数 Vue中的render函数是用来创建虚拟DOM的函数。它接受一个“createElement”函数作为参数用来构建D…

    Vue 2023年5月28日
    00
  • vue文件树组件使用详解

    下面是关于如何使用Vue树形组件的详细攻略: 1. 安装和引入 首先,需要安装并引入Vue树形组件库。你可以通过命令行安装npm包: npm install treevue –save 也可以直接在HTML文件中引入CDN: <script src="https://unpkg.com/treevue/dist/treevue.min.js…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部