Vue3 计算属性的用法详解

作者:ed。 时间:2024-04-28 09:20:33 

上一篇博文说了 vue3 项目的 toRefs 函数和 toRef 函数,今天就稍微总结一下 vue3 的计算属性,其实学过 vue2 的宝子们应该都清楚,计算属性这个东西在项目开发过程中使用的还是比较频繁的,使用频率相对来说比较高,所以说咱今天稍微总结一下 vue3 项目中的计算属性,下面开始。

computed 计算属性说明

computed 表示计算属性,通常的作用是用来进行数据处理,方便在末班中简化书写。

比如日常在模板中我们渲染数据的时候一般是使用 {{ }} 来进行展示数据,但是有的时候嘞,获取到的数据并不是我们想要的类型,我们可以在 {{ }} 中编写表达式转换成我们需要的类型,但是呢,这样做简单的还可以,如果相对复杂的格式在 {{ }} 中编写的话就会造成模板代码繁琐,不易维护和阅读,所以这并不是最好的编码习惯,因此,vue3 也为我们提供了一些好的解决方案,计算属性就是其中一种。

计算属性可以帮我们将数据转换成需要展示的数据格式,不必在模板中编写大量的表达式进行处理。

计算属性使用

首先呢,使用 computed 需要引入。

import { computed } from 'vue'

引入这一个步骤是不可或缺的。

然后我们编写一个案例,就是一个页面有两个输入框,第一个输入框的数 加上 第二个输入框的数,使用计算属性在第三个输入框求和。

<template>
 <div>
   <h1>computed 计算属性</h1>
   <el-input v-model="num1" /> +
   <el-input v-model="num2" /> =
   <el-input v-model="num3" />
 </div>
</template>
<script>
 import { computed, ref } from 'vue'
 export default {
   setup() {
     const num1 = ref('')
     const num2 = ref('')
     const num3 = computed(() => {
       return Number(num1.value) + Number(num2.value)
     })
     return { num1, num2, num3 }
   }
 }
</script>
<style scoped>
 .el-input {
   width: 100px;
 }
</style>

保存刷新,输如前两个输入框的值,会自动计算和展示在第三个输入框。

Vue3 计算属性的用法详解

这样就实现了最简单的计算属性。

计算属性不是只可以写一个的,可以写任意多个计算属性,怎么操作呢?看代码:

<template>
 <div>
   <h1>computed 计算属性</h1>
   <el-input v-model="num1" /> +
   <el-input v-model="num2" /> =
   <el-input v-model="num3" />
   <hr>
   <el-input v-model="num1" /> -
   <el-input v-model="num2" /> =
   <el-input v-model="num4" />
 </div>
</template>
<script>
 import { computed, reactive, toRefs } from 'vue'
 export default {
   setup() {
     const num1 = ''
     const num2 = ''
     const all = reactive({ num1, num2 })

// 计算属性求和
     const num3 = computed(() => {
       return Number(all.num1) + Number(all.num2)
     })

// 计算属性求差
     const num4 = computed(() => {
       return Number(all.num1) - Number(all.num2)
     })
     return { ...toRefs(all), num3, num4 }
   }
 }
</script>
<style scoped>
 .el-input {
   width: 100px;
 }
</style>

保存刷新,我们看到除了求和,还可以求差。

Vue3 计算属性的用法详解

这样的话,就实现了在一个页面实现多个计算属性的操作,完全不用写在一个计算属性里面进行判断处理,很灵活,当然了,有三个可以写三个,有四个可以写四个。

但是有一点需要注意!

如果我们直接修改计算属性的值会报一个错误!

比如我们有一个按钮,点击之后把 num4 修改为 10 。

function btn() {
       console.log(num4)
       num4.value = 10
     }

我们可以看一下效果。

Vue3 计算属性的用法详解

没错,他会有一个错误,这个意思都懂,就是计算属性是只读的不允许修改。

为什么呢?

总结: 如果传递给 computed 的是一个函数,那么这就是一个 getter 函数,我们只能获取它的值,而不能直接修改它。

那我需要修改计算属性的值,我们需要怎么操作呢?其实很简单,只需要传进去一个对象。

// 计算属性求和
     const num3 = computed({
       get: () => {
         return Number(all.num1) + Number(all.num2)
       },
       set:(value) => {
         console.log(value)
         return all.num2 = Number(value) + 1
       }
     })

也就是说,计算属性传入一个对象, 包含get 和 set 函数, 就能实现创建一个可以修改的计算属性。

案例:

<template>
 <div>
   <h1>computed 计算属性</h1>
   <el-input v-model="num1" /> +
   <el-input v-model="num2" /> =
   <el-input v-model="num3" />
   <br>
   <br>
   <el-button type="primary" @click="btn">修改计算属性</el-button>
 </div>
</template>
<script>
 import { computed, reactive, toRefs } from 'vue'
 export default {
   setup() {
     const num1 = ''
     const num2 = ''
     const all = reactive({ num1, num2 })

// 计算属性求和
     const num3 = computed({
       get: () => {
         return Number(all.num1) + Number(all.num2)
       },
       set:(value) => {
         console.log(value)
         return all.num2 = Number(value) + 1
       }
     })

function btn() {
       num3.value = '10'
     }

return { ...toRefs(all), num3, btn }
   }
 }
</script>
<style scoped>
 .el-input {
   width: 100px;
 }
</style>

点击按钮,把 num2 改成输入的数字 + 1,也就是11。

Vue3 计算属性的用法详解

好的,这就实现了修改计算属性。

来源:https://www.cnblogs.com/wjw1014/p/16452770.html

标签:Vue3,计算,属性
0
投稿

猜你喜欢

  • Pandas计算元素的数量和频率的方法(出现的次数)

    2023-01-02 03:44:58
  • Python中函数带括号和不带括号的区别及说明

    2023-01-23 05:23:28
  • pycharm实现print输出保存到txt文件

    2023-05-09 22:14:20
  • php根据isbn书号查询amazon网站上的图书信息的示例

    2023-11-15 03:08:53
  • 表格可读性提升分析

    2010-05-19 13:03:00
  • Python如何读写JSON格式数据

    2022-05-20 17:42:05
  • Pygame的程序开始示例代码

    2021-12-20 19:45:01
  • numpy拼接矩阵的实现

    2021-02-09 06:35:07
  • Python RuntimeError: thread.__init__() not called解决方法

    2022-12-22 17:11:46
  • Python Matplotlib库入门指南

    2022-04-27 11:51:01
  • Centos 6.4 安装Python 2.7 python-pip的详细步骤

    2023-12-01 10:21:03
  • MySQL 使用SQL语句修改表名的实现

    2024-01-17 09:14:31
  • Python对PDF文件的常用操作方法详解

    2021-10-13 06:49:56
  • 用FrongPage设计网页花样

    2008-09-17 10:47:00
  • Python+OpenCV实现阈值分割的方法详解

    2023-08-13 02:24:00
  • Python基础之hashlib模块subprocess模块logging模块

    2022-08-12 02:45:52
  • ASP中CACHE缓存技术

    2010-05-03 10:58:00
  • 使用SqlBulkCopy时应注意Sqlserver表中使用缺省值的列

    2012-07-11 15:34:35
  • php控制文件下载速度的方法

    2023-07-19 00:21:30
  • 我的“Orcas初览”讲座

    2007-09-23 12:53:00
  • asp之家 网络编程 m.aspxhome.com