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>
保存刷新,输如前两个输入框的值,会自动计算和展示在第三个输入框。
这样就实现了最简单的计算属性。
计算属性不是只可以写一个的,可以写任意多个计算属性,怎么操作呢?看代码:
<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>
保存刷新,我们看到除了求和,还可以求差。
这样的话,就实现了在一个页面实现多个计算属性的操作,完全不用写在一个计算属性里面进行判断处理,很灵活,当然了,有三个可以写三个,有四个可以写四个。
但是有一点需要注意!
如果我们直接修改计算属性的值会报一个错误!
比如我们有一个按钮,点击之后把 num4 修改为 10 。
function btn() {
console.log(num4)
num4.value = 10
}
我们可以看一下效果。
没错,他会有一个错误,这个意思都懂,就是计算属性是只读的不允许修改。
为什么呢?
总结: 如果传递给 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。
好的,这就实现了修改计算属性。
来源:https://www.cnblogs.com/wjw1014/p/16452770.html


猜你喜欢
- 前言接着上一篇:AI识别照片是谁,人脸识别face_recognition开源项目安装使用根据项目提供的demo代码,调整了一下功能,自己写
- 当我们修改一份代码的时候,也许会碰到修改后的代码还不如修改之前的代码能够满足自己的需求,那么这个时候我们就需要对代码进行回滚,下面我们来看一
- 目录实现加权轮询负载均衡思路加权轮询负载均衡代码测试代码实现加权轮询负载均衡思路代码实现一个加权负载均衡Weight
- 前言之前写过一个关于微信授权登陆的文章传送门最近在做小程序的项目,依旧是商城,又开始研究微信的登陆授权坑,第一次接触小程序,授权登陆也是一塌
- 根据当前时间戳获得整小时时间戳unit = 3600start_time = int(time.time())/3600 * 3600根据当
- 上周接到个需求,需求是这样的:用户扫一扫二维码会产生一个链接,该链接会向后端发送个请求,返回一个 apk 的下载地址,用户点击下载按钮可以下
- 三角函数如果我们以OP作为圆的半径r,以o点作为圆的圆心,圆上的点的x坐标就是r * cos a ,y坐标就是 r * sin a。pyth
- 一、简介是一个 python 内置包,不需要额外安装即可使用urllib 是 Python 标准库中用于网络请求的库,内置四个模块,分别是u
- 这些日子,几乎每个人都在谈论XML (Extensible Markup Language),但是很少有人真正理解其含义。XML的推崇者认为
- 就如平时我们很在分页中看到的,分页的时候返回的不仅包括查询的结果集(List),而且还包括总的页数(pageNum)、当前第几页(pageN
- 遇到一个问题,需要正则匹配远端FTP目录下的文件,如果使用ftp客户端可以通过命令行很容易的做到这一点,但是暂时没有一个工具支持这样的需求,
- 如下所示:#!/usr/bin/env python# -*- coding:utf-8 -*-import datetimetime_de
- 压缩复制删除文件基于python语言怎么操作呢,压缩文件有四种格式:zip、rar、tar、tar.gz,在压缩过程中也容易出现很多问题,今
- 正文开始if name == "main":可以看成是python程序的入口,就像java中的main()方法,但不完全
- 解决golang编译提示dial tcp 172.217.160.113:443: connectex: A connection atte
- 本文实例讲述了python字典序问题,分享给大家供大家参考。具体如下:问题描述:将字母从左向右的次序与字母表中的次序相同,且每个字符最大出现
- 本文实例讲述了python使用 cx_Oracle 模块进行查询操作。分享给大家供大家参考,具体如下:# !/usr/bin/env pyt
- 如下: Warning at /admin/assets/add/ Incorrect string value: '\xE5\x9
- 准备工作本文用到的表格内容如下:先来看一下原始情形:import pandas as pddf = pd.read_excel(r'
- 如何用net/http构建一个简单的web服务Golang提供了简洁的方法来构建web服务package main import ( &nb