uniapp-实现购物车弹框

最近在写一个小程序,其中设计到了购买商品的业务

我们知道,像美团和饿了么,还有淘宝京东这些知名app 都是有购物车的功能

下面我讲一下我实现的思路

=>  使用Vuex

=>  在添加删除时触发对应方法 

=>  判断是加还是减,并把数据做逻辑处理储存 

=>  触发Vuex内的方法,去修改或储存item数据 

=>  渲染到购物车的列表从Vuex内去取 

封装组件

因为不止在一个地方使用到了购物车,所以我选择封装一个组件,可以进行复用 

<template>
	<view>
		<view class="my-cart-mask" v-if="myShow" @click="hide"></view>
		<view class="my-cart animated" v-if="myShow" :class="{slideInUp: wrapper,slideOutDown: !wrapper}">
			<view class="title-wrapper">
				<view class="title">购物车</view>
				<view class="iconfont close" @click="hide"></view>
			</view>
			<view class="list-wrapper" v-if="list.length">
				<view class="cart-list">
					<view v-for="(item, index) in list" :key="index" class="cart-item">
						<cartItem :info="item"></cartItem>
					</view>
				</view>
				<view class="price-wrapper">
					<view class="price-item">包装费<text>¥4</text></view>
					<view class="price-item">配送费<text>¥4</text></view>
					<view class="price-item">快递费<text>¥4</text></view>
				</view>
			</view>
			<view class="empty" v-else>您的购物车是空的</view>
		</view>
	</view>
</template>

<script>
import cartItem from '.
以下是使用uniapp checkbox-group实现购物车全选的示例代码: 1. 在template中添加checkbox-group和checkbox组件 ``` <template> <view> <checkbox-group bindchange="selectAllChange"> <checkbox value="all" checked="{{allSelected}}">全选</checkbox> </checkbox-group> <view v-for="(item, index) in cartList"> <checkbox value="{{item.id}}" checked="{{item.selected}}" bindchange="selectChange">{{item.name}}</checkbox> </view> </view> </template> ``` 2. 在script中添加data属性和方法 ``` <script> export default { data() { return { cartList: [], // 购物车列表 allSelected: false // 是否全选 } }, onShow() { // 获取购物车列表 this.getCartList() }, methods: { // 获取购物车列表 getCartList() { // 省略获取购物车列表的代码 }, // 单个商品选中状态改变事件 selectChange(event) { const id = event.target.value const selected = event.detail.value.length > 0 // 更新购物车列表中对应商品的选中状态 this.cartList = this.cartList.map(item => { if (item.id === id) { item.selected = selected } return item }) // 判断是否全选 this.checkAllSelected() }, // 全选状态改变事件 selectAllChange(event) { const selected = event.detail.value.length > 0 // 更新购物车列表中所有商品的选中状态 this.cartList = this.cartList.map(item => { item.selected = selected return item }) // 更新全选状态 this.allSelected = selected }, // 检查是否全选 checkAllSelected() { const selectedList = this.cartList.filter(item => item.selected) this.allSelected = selectedList.length === this.cartList.length } } } </script> ``` 3. 在style中添加样式 ``` <style> .uni-checkbox { margin-right: 10px; } </style> ``` 4. 注意事项 - checkbox-group组件中的value值需要设置为all,并且checked值绑定allSelected变量; - checkbox组件中的value值需要设置为对应商品的id,并且checked值绑定商品的selected属性; - selectChange方法中需要更新对应商品的selected属性,并调用checkAllSelected方法检查是否全选; - selectAllChange方法中需要更新所有商品的selected属性,并更新allSelected变量; - checkAllSelected方法中需要筛选出已选中的商品,判断是否全选。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值