关于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如何判断数组中的对象是否包含某个值

    当需要在Vue中判断数组中的对象是否包含某个特定值时,可以使用JavaScript中的find()函数和includes()函数来实现。 使用find()函数 find()函数返回数组中第一个符合条件的元素值,如果没有符合条件的元素则返回undefined。可以将find()函数与箭头函数配合使用来查找数组中特定对象是否存在。 以下是一个示例: const …

    Vue 2023年5月27日
    00
  • Vue3将虚拟节点渲染到网页初次渲染详解

    Vue3将虚拟节点渲染到网页初次渲染详解 在Vue3中,将虚拟节点渲染到网页上,是在createApp的过程中完成的。具体的过程如下: 创建Vue实例 我们可以使用createApp方法创建Vue实例,如下: const app = Vue.createApp({ // Options }) createApp方法中的参数可以传入一个普通的JavaScrip…

    Vue 2023年5月28日
    00
  • 一文教你学会在Vue3中自定义指令

    下面详细讲解在Vue3中自定义指令的完整攻略。 什么是Vue指令? 在Vue中,指令是一种特殊的标签,用于在模板中添加一些特殊的行为。例如,我们可以使用v-bind指令来动态绑定属性,也可以使用v-on指令来监听事件等。 Vue提供了许多内置指令,但是我们也可以自定义指令来实现特定的功能。 Vue自定义指令的基本结构 在Vue中,定义一个自定义指令需要使用V…

    Vue 2023年5月28日
    00
  • vue的安装及element组件的安装方法

    下面是“vue的安装及element组件的安装方法”的完整攻略。 Vue的安装方法 1. 使用CDN加载Vue 在HTML文件中使用CDN方式加载Vue,只需要在中添加以下代码即可。 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script&g…

    Vue 2023年5月28日
    00
  • vue实现图片路径转二进制文件流(binary)

    下面是详细的攻略: 如何实现图片路径转换为二进制文件流(binary)? 将图片路径转化为二进制文件流的过程,包括三个步骤:获取图片,读取图片文件二进制,将二进制数据存储起来。下面是具体步骤。 获取图片 获取图片通常需要从 input[type=file] 元素或一个图片 URL。对于 input[type=file] 元素,可通过 onchange 事件获…

    Vue 2023年5月27日
    00
  • vue-router路由懒加载及实现方式

    什么是路由懒加载 路由懒加载也被称为按需加载,是一种优化策略,主要是用来加速大型单页应用程序的加载速度。通常情况下,SPA应用程序由多个页面分别对应不同的路由,这些页面通常会一次性加载进浏览器中,然而这样的一干式加载很容易造成文件过大,页面加载速度缓慢。 利用路由懒加载机制,我们可以延迟加载应用程序的某些组件模块,一旦用户进入相应的路由,才加载这个模块,这样…

    Vue 2023年5月28日
    00
  • 使用vue-cli创建vue2项目的实战步骤详解

    下面就是使用vue-cli创建vue2项目的实战步骤详解: 步骤一:安装node.js和npm 在使用vue-cli创建vue2项目之前,需要先安装node.js和npm,这里就不再赘述了,如果还没安装的话可以到node.js官网下载安装包进行安装。 步骤二:安装vue-cli 使用npm全局安装vue-cli,执行如下命令: npm install -g …

    Vue 2023年5月27日
    00
  • Vue响应式原理模拟实现原理探究

    Vue响应式原理模拟实现原理探究 什么是 Vue 响应式原理? Vue.js 是一个基于数据驱动的前端框架,主要利用观察者模式实现了 MVVM 模式。在 Vue 中,我们可以通过操作数据来动态改变视图,并且数据和视图是“响应式”的,即数据变化后,对应的视图也会发生变化。 Vue 响应式原理模拟实现 响应式对象 在 Vue 中,可以将一个对象设置为“响应式”的…

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