博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在vue中如何实现购物车checkbox的三级联动
阅读量:6498 次
发布时间:2019-06-24

本文共 3016 字,大约阅读时间需要 10 分钟。

最近用vue写一个电商项目,自然就少不了要写一个购物车的相关页面,功能完整的购物车的checkbox应该是三级联动的,1级checkbox是选中购物车中所有的商品,2级checkbox是选中某个店铺下的所有商品,3级checkbox是选中单个商品,如下图:

那么,如何在vue中如何实现三级联动呢?

主要思路分为以下3步:

1.首先在购物车中的每条商品信息里(在data中定义shops>>products>>isSelected),包含一个isSelected的布尔值属性,表示单个商品是否已被选中,并且在checkbox中用v-model进行双向绑定;

1 shops: [ 2     { 3         index: 1, 4         brand: '鲜绿水果', 5         title: '旗舰店', 6         // 购物车中每个店铺的商品列表 7         products: [ 8             { 9                 id: 2,10                 num: 1,11                 isSelected: true,12             },13             {14                 id: 5,15                 num: 2,16                 isSelected: true,17             },18         ],19     },20     {21         index: 2,22         brand: '鲜活之道',23         title: '自营店',24         products: [25             {26                 id: 12,27                 num: 1,28                 isSelected: false,29             },30             {31                 id: 15,32                 num: 2,33                 isSelected: false,34             },35         ],36     },37 ]

2.在computed中定义isSelectedAll布尔值属性,表示商品是否被全选,另外还有一个数组isShopSelectedAll,数组中包含的布尔值表示每个店铺中的商品是否被全选,这两个属性都是根据每个商品中的isSelected的值计算出来的,且这两个值也要在各自的checkbox中进行绑定;(有一点需要注意的是,由于v-model进行绑定需要改变computed的值,默认情况下computed只有getter没有setter,所以需要在isSelectedAll中加一个空的setter,表示这个计算属性可以设置)

1  // 购物车中的商品是否全选 2 isSelectedAll: { 3     get () { 4         for (var i = 0; i < this.shops.length; i++) { 5             if (!this.isShopSelectedAll[i]) { 6                 return false; 7             } 8             } 9             return true;10     },11     // 这里要加一个空的setter,因为用v-model绑定时会报错12     set () {},13 },14 // 店铺中的商品是否全选15 isShopSelectedAll: function () {16     var tempArr = [];17     for (var i = 0; i < this.shops.length; i++) {18         tempArr[i] = true;19         var products = this.shops[i].products;20         for (var j = 0; j < products.length; j++) {21             if (!products[j].isSelected) {22                 tempArr[i] = false;23                 break;24             }25         }26     }27     return tempArr;28 },

3.然后,定义一个方法selectAll(all),在点击1级checkbox或2级checkbox时,改变对应每条商品中的isSelected的布尔值,然后在computed中的isSelectedAll、isShopSelectedAl会自动响应;

1 // 全选购物车或者单个店家 2 selectAll: function (all) { 3     // 参数all可传入shops数组或者shops数组内的一个对象 4     // all传入shops数组表示购物车中商品全选 5     // all传入一个对象表示某个店铺中商品全选 6     if (all instanceof Array) { 7         var bool = !this.isSelectedAll; 8         // var bool = false; 9         for (var i = 0; i < all.length; i++) {10             var products = all[i].products;11             for (var j = 0; j < products.length; j++) {12                 products[j].isSelected = bool;13             }14         }15     } else {16         var index = this.shops.indexOf(all);17         var bool = !this.isShopSelectedAll[index];18         for (var i = 0; i < all.products.length; i++) {19             all.products[i].isSelected = bool;20         }21     }22 },

 

这样,就可以实现购物车中checkbox的三级联动了。

 

体验地址:

源码地址:

 

转载于:https://www.cnblogs.com/yuanyiming/p/10745001.html

你可能感兴趣的文章
【Treap】bzoj1588-HNOI2002营业额统计
查看>>
第六周作业
查看>>
利用ZYNQ SOC快速打开算法验证通路(5)——system generator算法IP导入IP integrator
查看>>
指针和引用的区别
查看>>
转:strcat与strcpy与strcmp与strlen
查看>>
运行PHP出现No input file specified错误解决办法
查看>>
【重建】从FJOI2016一试谈起
查看>>
selenium之frame操作
查看>>
php 引入其他文件中的变量
查看>>
MYSQL体系结构-来自期刊
查看>>
PHP——图片上传
查看>>
mysql的基本知识
查看>>
exchange 2003配置ASSP 反垃圾邮件
查看>>
CQRS学习——最小单元的Cqrs(CommandEvent)[其一]
查看>>
webpack入门(二)what is webpack
查看>>
UnitOfWork以及其在ABP中的应用
查看>>
学习C语言必须知道的理论知识(第一章)
查看>>
for语句内嵌例题与个人理解
查看>>
眠眠interview Question
查看>>
Linux C++/Java/Web/OC Socket网络编程
查看>>