【Vue3】computed 计算属性

computed 基础语法

<template><div><div>性:<input v-model="firstName" type="text"></div><div>名:<input v-model="lastName" type="text"></div><div>全名:<input v-model="fullName" type="text"></div><button @click="changeName">changeName</button></div>
</template><script setup lang="ts">
import { ref, computed } from 'vue';
let firstName = ref('zhang')
let lastName = ref('san')// 1.选项式写法 支持一个对象传入getter和setter自定义操作
let fullName = computed<string>({get () {return firstName.value + '-' + lastName.value},set(newVal) {console.log(newVal.split('-'));[firstName.value,lastName.value] = newVal.split('-')}
})
const changeName = () => [fullName.value = 'xiao-hu'
]//2.函数式写法,只能支持一个getter函数,不可以修改值
// let fullName = computed(() => firstName.value + '-' + lastName)
// 不可以修改
// const changeName = () => {
//   fullName.value = 'xiao-hu'
// }
</script><style lang="scss" scoped></style>

购物车小案例

未使用computed优化

<template><div><input placeholder="搜索" type="text"></div><div style="margin-top: 20px"><table border width="600" cellpadding="0" cellspacing="0"><thead><tr><th>物品名称:</th><th>物品单价:</th><th>物品数量:</th><th>物品总价:</th><th>操作</th></tr></thead><tbody><tr v-for="(item,index) in data"><td align="center">{{ item.name }}</td><td align="center">{{ item.price }}</td><td align="center"><button @click="item.num>1 ? (item.num--, total()) : null">-</button>{{ item.num }}<button @click="item.num < 99 ? (item.num++, total()) : null">+</button></td><td align="center">{{ item.num * item.price }}</td><td align="center"><button @click="del(index)">del</button></td></tr></tbody><tfoot><tr><td colspan="5" align="right">总价:{{ $total }}</td></tr></tfoot></table></div>
</template><script setup lang="ts">
import { ref, reactive } from 'vue'
let $total = ref<number>(0)
interface Data {name: string,price: number,num: number,
}
let data = reactive<Data[]>([{name: '手机',price: 100,num: 1},{name: '电脑',price: 200,num: 2},{name: '笔记本',price: 300,num: 3}
])const total = () => {$total.value = data.reduce((prev:number, next: Data) => {return prev + next.num * next.price},0)
}
total()
const del = (index:number) => {data.splice(index, 1)total()}
</script><style lang="scss" scoped></style>

使用computed优化

<template><div><input v-model="keyWord" placeholder="搜索" type="text"></div><div style="margin-top: 20px"><table border width="600" cellpadding="0" cellspacing="0"><thead><tr><th>物品名称:</th><th>物品单价:</th><th>物品数量:</th><th>物品总价:</th><th>操作</th></tr></thead><tbody><tr v-for="(item, index) in searchData"><td align="center">{{ item.name }}</td><td align="center">{{ item.price }}</td><td align="center"><button @click="item.num > 1 ? item.num-- : null">-</button>{{ item.num }}<button@click="item.num < 99 ? item.num++ : null">+</button></td><td align="center">{{ item.num * item.price }}</td><td align="center"><button @click="del(index)">del</button></td></tr></tbody><tfoot><tr><td colspan="5" align="right">总价:{{ total }}</td></tr></tfoot></table></div>
</template><script setup lang="ts">
import { ref, reactive, computed } from 'vue'
let keyWord = ref<string>('')
interface Data {name: string,price: number,num: number,
}
let data = reactive<Data[]>([{name: '手机',price: 100,num: 1},{name: '电脑',price: 200,num: 2},{name: '笔记本',price: 300,num: 3}
])// const total = () => {
//   $total.value = data.reduce((prev:number, next: Data) => {
//     return prev + next.num * next.price
//   },0)
// }
const total = computed(() => {return data.reduce((prev: number, next: Data) => {return prev + next.num * next.price}, 0)
})const searchData = computed(() => {return data.filter((item: Data) => {return item.name.includes(keyWord.value)})
})
// 使用 searchData 搜索后的总价有bug,不会随 searchData 的数据改变(抽空再改啦~~)const del = (index: number) => {data.splice(index, 1)
}
</script><style lang="scss" scoped></style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/8440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android版本的发展4-13

Android 4.4 KitKat 1、通过主机卡模拟实现新的 NFC 功能。 2、低功耗传感器&#xff0c;传感器批处理&#xff0c;步测器和计步器。 3、全屏沉浸模式&#xff0c;隐藏所有系统 UI&#xff0c;例如状态栏和导航栏。它适用于鲜艳的视觉内容&#xff0c;例如照片、视频、地图、…

API自动化测试总结

目录 Jmeter是怎么做API自动化测试的&#xff1f; Jmeter中动态参数的处理&#xff1f; 怎么判断前端问题还是后端问题&#xff1f; 详细描述下使用postman是怎么做API的测试的&#xff1f; 资料获取方法 Jmeter是怎么做API自动化测试的&#xff1f; 1、首先在JMeter里面…

Spring AOP(面向切面编程)的详细讲解

1.什么是 AOP&#xff1f; AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff1a;⾯向切⾯编程&#xff0c;它是⼀种思想&#xff0c;它是对某⼀类事情的集中处理 AOP是一种思想&#xff0c;而Spring AOP是一个实现了AOP的思想框架&#xff0c;他们的关系和IOC…

git实战

git实战 第一章 快速入门 1.1 什么是git git是一个分布式的版本控制软件。 软件&#xff0c;类似于QQ、office、dota等安装到电脑上才能使用的工具。版本控制&#xff0c;类似于毕业论文、写文案、视频剪辑等&#xff0c;需要反复修改和保留原历史数据。分布式 - 文件夹拷贝…

rk3588 编译(使用github公版源码)和烧录(sd、emmc)

使用 github 上的代码进行编译 https://github.com/rockchip-linux/rkbin/tree/master https://github.com/rockchip-linux/u-boot/tree/next-dev https://github.com/rockchip-linux/kernel/tree/develop-5.10 下载他们的压缩包&#xff0c;自行解压&#xff0c;解压后把文件夹…

RocketMQ教程-(4)-领域模型概述

Apache RocketMQ 是一款典型的分布式架构下的中间件产品&#xff0c;使用异步通信方式和发布订阅的消息传输模型。通信方式和传输模型的具体说明&#xff0c;请参见下文通信方式介绍和消息传输模型介绍。 Apache RocketMQ 产品具备异步通信的优势&#xff0c;系统拓扑简单、上下…

Java-IDEA好用的插件

Lombok&#xff0c;结合一些列注解&#xff0c;帮我们轻松解决重复编写实体类get、set、toString、build、构造方法等麻烦 Chinesepinyin-CodeComp&#xff0c;让界面汉化&#xff0c;使用起来更有亲和力 MyBatisX,点击小鸟图标&#xff0c;轻松再Mapper接口与xml文件之间实…

无涯教程-html(val)

html(val)方法设置每个匹配元素的html内容。此属性在XML文档上不可用&#xff0c;但适用于XHTML文档。 html( val ) - 语法 selector.html( val ) 这是此方法使用的所有参数的描述- val - 任何字符串 html( val ) - 示例 以下示例将获取第一段的HTML内容&#xff0c;并…

【算法与数据结构】104、111、LeetCode二叉树的最大/最小深度

文章目录 一、题目二、层序遍历法三、递归法四、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、层序遍历法 思路分析&#xff1a;两道题都可以用层序遍历&#xff08;迭代法&#xff09;来做&#xff0c;遍历完…

帮助中心内容需要囊括什么?(内含案例分享)

给产品制作一个帮助中心&#xff0c;让用户能够通过访问帮助中心查看产品相关内容&#xff0c;尽快了解产品&#xff0c;熟悉操作。不仅仅局限于售后&#xff0c;在售中售前都能够发挥很大的作用&#xff0c;帮助用户全面了解产品&#xff0c;减少销售的工作量&#xff0c;节约…

如何开展企业级spring cloud微服务开发实践落地

随着互联网技术的不断发展&#xff0c;微服务架构已经成为了企业级应用开发的重要趋势。Spring Cloud是基于Spring Boot的微服务框架&#xff0c;它提供了一系列的组件和工具&#xff0c;可以帮助开发者快速搭建、部署和管理微服务系统。本文将介绍如何开展企业级Spring Cloud微…

Zookeeper命令总结

目录 1、常用命令2、ls path3、create xxx创建持久化节点创建临时节点创建持久化序列节点 4、get path5、set path6、delete path7、监听器总结1&#xff09;节点的值变化监听2&#xff09;节点的子节点变化监听&#xff08;路径变化&#xff09;3&#xff09;当某个节点创建或…

最优化方法

一. 图论 1.最小生成树 图的生成树是它的一颗含有其所有顶点的无环连通子图,一 幅加权图的最小生成树(MST)是它的一颗权值(树中的所有边的权值之和) 最小的生成树 • 适用场景&#xff1a;道路规划、通讯网络规划、管道铺设、电线布设等 题目数据 kruskal算法 稀疏图&#x…

oracle单个用户最大连接数限制

项目经理反馈&#xff0c;现场已做了单个用户的最大连接数2000的限制&#xff0c;但数据库还是报无法连接&#xff0c;故障用户的连接数已3800多了。 查看日志报错如下 2023-07-20T13:07:57.79465308:00 Process m000 submission failed with error 20 Process m000 submiss…

HDFS的设计目标和重要特性

HDFS的设计目标和重要特性 设计目标HDFS重要特性主从架构分块存储机制副本机制namespace元数据管理数据块存储 设计目标 硬件故障(Hardware Failure)是常态&#xff0c;HDFS可能有成百上千的服务器组成&#xff0c;每一个组件都有可能出现故障。因此古见检测和自动快速恢复的H…

梯度提升树的基本思想

目录 1. 梯度提升树 VS AdaBoost 2. GradientBoosting回归与分类的实现 2.1 GradientBoosting回归 2.2 GradientBoosting分类 1. 梯度提升树 VS AdaBoost 梯度提升树&#xff08;Gradient Boosting Decision Tree&#xff0c;GBDT&#xff09;是提升法中的代表性算法&#…

赛码-0726

01串的魔法 思路&#xff1a;虽然标着dp&#xff0c;其实是滑动窗口问题&#xff0c;dp 会超时 import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();int k scanner.nextInt…

帆软报表设计器设置步骤

1、连接工作目录&#xff08;可以是远程服务器&#xff09; 在打开的界面中设置具体的远程地址 一个报表文件可以有多个数据集、但是数据集依附于报表文件的存在&#xff0c;不能跨报表共享。 先补充这么多&#xff0c;有遇到问题再写一点。 &#xff08;完&#xff09;

指针易混淆概念:*p++,*(p++),++(*p)

&#xff08;1&#xff09;a[1]和&a[1] a[1]:二维数组的第二行元素&#xff0c;即a[1]是以a[1][0]开头的一维数组&#xff0c;类型是一级指针 &a[1]:二维数组的第二行元素的地址&#xff0c;类型是二级指针 &#xff08;2&#xff09;a1与*&#xff08;a1&#xff09…

我的创作纪念日——暨成为创作者满1024日的总结

我的创作纪念日 机缘收获日常成就憧憬 机缘 最初写博客&#xff0c;是因为身边一个同事&#xff0c;写了几篇博客&#xff0c;然后给我臭摆&#xff0c;于是&#xff0c;不服输的自己也动手开始写了。之后&#xff0c;就逐渐写出惯性来了&#xff0c;现在每月4篇&#xff0c;基…