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

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

下面是代码实现:

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

html 复制代码
<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.value
		goods.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 函数),实时计算所有被选中商品(checkedtrue)的总价格。

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

javascript 复制代码
const totalPrice = computed(()=>{
	 return goods.value.filter(item=>item.checked).reduce((prev,curr)=>prev+curr.price,0)
})
  1. .filter(item => item.checked)

    • 过滤 goods.value 数组,只保留 checkedtrue 的商品(即用户选中的商品)。
  2. .reduce((prev, curr) => prev + curr.price, 0)

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

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

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

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

相关推荐
前端小菜袅3 分钟前
AI时代,新的技术学习方式
学习·ai编程
victory043111 分钟前
大模型学习阶段总结和下一阶段展望
深度学习·学习·大模型
Mr -老鬼12 分钟前
移动端跨平台适配技术框架:从发展到展望
android·ios·小程序·uni-app
程序猿零零漆15 分钟前
Spring之旅 - 记录学习 Spring 框架的过程和经验(十三)SpringMVC快速入门、请求处理
java·学习·spring
曾浩轩24 分钟前
跟着江协科技学STM32之4-5OLED模块教程OLED显示原理
科技·stm32·单片机·嵌入式硬件·学习
CCPC不拿奖不改名36 分钟前
网络与API:从HTTP协议视角理解网络分层原理+面试习题
开发语言·网络·python·网络协议·学习·http·面试
却道天凉_好个秋38 分钟前
音视频学习(八十四):视频压缩:MPEG 1、MPEG 2和MPEG 4
学习·音视频
●VON40 分钟前
AI 保险机制:为智能时代的不确定性兜底
人工智能·学习·安全·制造·von
代码游侠1 小时前
学习笔记——HC-SR04 超声波测距传感器
开发语言·笔记·嵌入式硬件·学习
军军君011 小时前
Three.js基础功能学习七:加载器与管理器
开发语言·前端·javascript·学习·3d·threejs·三维