uniapp实现---类似购物车全选

目录

一、实现思路

二、实现步骤

        ①view部分展示

        ②JavaScript 内容

        ③css中样式展示

三、效果展示

四、小结 + 注意事项


一、实现思路


        点击商家复选框,可选中当前商家下的所有商品。点击全选,选中全部商家的商品

添加单个多选框,在将多选框绑定到全选按钮上。

uniapp内置的checkbox以及checkbox-group:

        无法依赖其事件实现全选,样式固定,难以修改。
 

二、实现步骤

        ①view部分展示

               

<view>
		<view class="checkboxAll">
			<u-checkbox-group @change="selectAll">
				<u-checkbox :checked="allChecked" shape="circle" activeColor="#FF6C47"></u-checkbox><text style="color: #FF6C47;">全选</text>
			</u-checkbox-group>
		</view>
		<template v-for="(item,index) in itemsList">
			<view class="uni-list" style="padding: 32rpx" :key="index">
				<view class="flex-between">
					<view class="flex">
						<checkbox-group @change="changeitem(item)" checked class="checkbox" >
							<u-checkbox :value="item.name" :checked="item.checked" shape="circle" activeColor="#FF6C47"/>
						</checkbox-group>

						<view class="flex-colomn" style="margin-left: 16rpx;">
							<view style="font-size: 32rpx;color: #1A1A1A;">{{item.name}}</view>
							<view style="ont-size: 24rpx;color: #666666;margin-top: 8rpx;"><text
									style="ont-size: 24rpx;color: #666666;">学号:</text>{{item.number}}</view>
						</view>
					</view>
					<view class="flex">
						<view style="font-size: 36rpx;color: #1A1A1A;">{{item.num}}</view>
						<view style="margin-left: 16rpx;">
							<u-icon name="arrow-right" size="15" color="#999999"></u-icon>
						</view>
					</view>
				</view>
			</view>
		</template>
	</view>

        ②JavaScript 内容

        

<script>
	export default {
		data() {
			return {
				checkList: [], //选中值
				allChecked: false, //是否全选
				title: 'checkbox 复选框',
				itemsList: [{
					name: '美国',
					number: "20030303",
					num: "90",
					checked: false
				}, {
					name: '美国',
					number: "20030303",
					num: "90",
					checked: false
				}, {
					name: '美国',
					number: "20030303",
					num: "90",
					checked: false
				}, {
					name: '美国',
					number: "20030303",
					num: "90",
					checked: false
				}, ]
			}
		},
		methods: {
			//单选
			changeitem(item) {
				item.checked = !item.checked
				if (!item.checked) {
					this.allChecked = false
				} else {
					// 判断每一个列表是否是被选择的状态
					const cartList = this.itemsList.every(item => {
						return item.checked === true
					})
					if (cartList) {
						this.allChecked = true
					} else {
						this.allChecked = false
					}
				}
			},

			//全选,全不选
			selectAll() {
				this.allChecked = !this.allChecked
				if (this.allChecked) {
					this.itemsList.map(item => {
						item.checked = true
					})
				} else {
					this.itemsList.map(item => {
						item.checked = false
					})
				}
			},
		},
	}
</script>

        ③css中样式展示


<style lang="scss" scoped>
	.checkboxAll {
		margin-left: 80%;
		margin-top: 24rpx;
	}

	.uni-list-cell {
		justify-content: flex-start;
	}

</style>

三、效果展示

        可以全部选择的状态,也可以是单选状态。

               

四、小结 + 注意事项

        u-checkbox-group标签中u-checkbox没有插槽,不支持在里面写内容,必须在u-checkbox-group外面写内容布局。u-checkbox-group--->u-checkbox是可以实现的。

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用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、付费专栏及课程。

余额充值