当前位置: 首页 > ai >正文

uni-app学习笔记十--vu3 computed的运用(二)

在商城类项目中,经常需要根据用户选中的商品动态计算总价,此时可以使用computed计算属性动态计算。先来看效果:

下面是代码实现:

需要注意的是,vue中checked选中的值须为字符串类型,所以下面的id声明为字符串类型而不是整型。

<template><view class="out"><checkbox-group @change="itemChange"><view class="item" v-for="(item,index) in goods" :key="item.id"><checkbox :value="item.id" :checked=item.checked></checkbox><text class="title">{{item.name}}</text><text class="price">{{item.price}}元</text><text class="del" @click="remove(index)">删除</text></view></checkbox-group><view class="card"><view class="text">总共选择了{{selectedItems.length}}件商品,总价是{{totalPrice}}元</view></view></view>
</template><script setup>import {computed, ref} from "vue"const goods = ref([{"id":"1","name":"Apple",price:8999,checked:false},{"id":"2","name":"华为",price:3899,checked:false},{"id":"3","name":"小米",price:1999,checked:false},{"id":"4","name":"oppon",price:1699,checked:false},])const selectedItems = ref([])const totalPrice = computed(()=>{return goods.value.filter(item=>item.checked).reduce((prev,curr)=>prev+curr.price,0)})function remove(index){goods.value.splice(index,1)}function itemChange(e){selectedItems.value=e.detail.valuegoods.value.forEach(item=>{item.checked=selectedItems.value.includes(item.id)})}</script><style lang="scss">.out{padding: 10px;.item{padding: 10px 0;.price{margin-left: 30px;}.del{color:#c00;margin-left: 30px;}}    .card{margin-top: 30px;border-top: 1px solid #eee;padding: 10px 0;}}
</style>

在上面代码中实现了:

  1. 在JS部分定义了商品集合,里边包含商品的id,名称,价格,是否选中;
  2. 定义选中事件itemChange,在绑定的方法中获取选中的值,并实时监听子项的选中和取消选中,获得商品的选中状态;
  3. 定义了一个名为 totalPrice 的计算属性(使用 Vue 的 computed 函数),实时计算所有被选中商品(checked 为 true)的总价格。

下面重点说下第3点:使用computed 实时计算选中商品的价格:

const totalPrice = computed(()=>{return goods.value.filter(item=>item.checked).reduce((prev,curr)=>prev+curr.price,0)
})

  1. .filter(item => item.checked)

    • 过滤 goods.value 数组,只保留 checked 为 true 的商品(即用户选中的商品)。

  2. .reduce((prev, curr) => prev + curr.price, 0)

    • 对过滤后的选中商品数组进行归约操作:

      • 从初始值 0 开始,遍历每个商品(curr)。

      • 将当前商品的价格(curr.price)累加到总和(prev)中。

    • 最终返回所有选中商品价格的总和。

http://www.xdnf.cn/news/8753.html

相关文章:

  • Mybatis Plus 拦截器忽略机制全解:InterceptorIgnoreHelper 源码与实战
  • 免费实景三维倾斜模型数据连接分享(浙江)
  • MQTT-SpringBoot整合
  • 零残留优化!高性能电脑系统加速利器
  • 谈谈worldquant中设置的几个意思
  • 第15章—面试技巧篇(下):如何主导面试节奏和有技巧地提问面试官
  • 汽车软件刷写 APP SBL PBL概念
  • 美团2025年校招笔试真题手撕教程(一)
  • 北京航空航天大学保研上机真题
  • 四、生活常识
  • 读书感悟[2]
  • gcc编译构建流程
  • 重温简单递归
  • Es6中怎么使用class实现面向对象编程
  • Android学习之登录界面(包含忘记密码 记住密码)(java + 详细注释 + 源码)
  • 基于SpringBoot的校园电竞赛事系统
  • DARLR用于具有动态奖励的推荐系统的双智能体离线强化学习(论文大白话)
  • Java 的 synchronized
  • 【计算机网络】基于TCP进行socket编程——实现客户端到服务端远程命令行操作
  • Linux Kernel调试:强大的printk(二)
  • git子模块--命令--表格版
  • Spring MVC 的的核心原理与实践指南
  • 记录第一次正式收到SCI期刊论文的审稿
  • Github 2025-05-25 php开源项目日报 Top10
  • 进阶-自定义类型(结构体、位段、枚举、联合)
  • 在 Ubuntu linux系统中设置时区的方案
  • C++引用以及和指针的区别
  • PyTorch Image Models (timm) 技术指南
  • 【Linux】进程信号(一):信号的产生与信号的保存
  • 刷题记录(6)栈与队列相关操作