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

那么,如何在vue中如何实现三级联动呢?
主要思路分为以下3步:
1.首先在购物车中的每条商品信息里(在data中定义shops>>products>>isSelected),包含一个isSelected的布尔值属性,表示单个商品是否已被选中,并且在checkbox中用v-model进行双向绑定;
shops: [
{
index: 1,
brand: '鲜绿水果',
title: '旗舰店',
// 购物车中每个店铺的商品列表
products: [
{
id: 2,
num: 1,
isSelected: true,
},
{
id: 5,
num: 2,
isSelected: true,
},
],
},
{
index: 2,
brand: '鲜活之道',
title: '自营店',
products: [
{
id: 12,
num: 1,
isSelected: false,
},
{
id: 15,
num: 2,
isSelected: false,
},
],
},
]
2.在computed中定义isSelectedAll布尔值属性,表示商品是否被全选,另外还有一个数组isShopSelectedAll,数组中包含的布尔值表示每个店铺中的商品是否被全选,这两个属性都是根据每个商品中的isSelected的值计算出来的,且这两个值也要在各自的checkbox中进行绑定;(有一点需要注意的是,由于v-model进行绑定需要改变computed的值,默认情况下computed只有getter没有setter,所以需要在isSelectedAll中加一个空的setter,表示这个计算属性可以设置)
// 购物车中的商品是否全选
isSelectedAll: {
get () {
for (var i = 0; i < this.shops.length; i++) {
if (!this.isShopSelectedAll[i]) {
return false;
}
}
return true;
},
// 这里要加一个空的setter,因为用v-model绑定时会报错
set () {},
},
// 店铺中的商品是否全选
isShopSelectedAll: function () {
var tempArr = [];
for (var i = 0; i < this.shops.length; i++) {
tempArr[i] = true;
var products = this.shops[i].products;
for (var j = 0; j < products.length; j++) {
if (!products[j].isSelected) {
tempArr[i] = false;
break;
}
}
}
return tempArr;
},
3.然后,定义一个方法selectAll(all),在点击1级checkbox或2级checkbox时,改变对应每条商品中的isSelected的布尔值,然后在computed中的isSelectedAll、isShopSelectedAl会自动响应;
// 全选购物车或者单个店家
selectAll: function (all) {
// 参数all可传入shops数组或者shops数组内的一个对象
// all传入shops数组表示购物车中商品全选
// all传入一个对象表示某个店铺中商品全选
if (all instanceof Array) {
var bool = !this.isSelectedAll;
// var bool = false;
for (var i = 0; i < all.length; i++) {
var products = all[i].products;
for (var j = 0; j < products.length; j++) {
products[j].isSelected = bool;
}
}
} else {
var index = this.shops.indexOf(all);
var bool = !this.isShopSelectedAll[index];
for (var i = 0; i < all.products.length; i++) {
all.products[i].isSelected = bool;
}
}
},
这样,就可以实现购物车中checkbox的三级联动了。
体验地址:https://yuan-yiming.github.io/fresh-everyday/dist/#/user-center/shopping-cart
源码地址:https://github.com/Yuan-Yiming/fresh-everyday/blob/master/src/components/ShoppingCart.vue
在vue中如何实现购物车checkbox的三级联动的更多相关文章
- vue中使用radio和checkbox
代码 <template> <div id="app"> <input type="checkbox" v-model=" ...
- 从QQ网站中提取的纯JS省市区三级联动
在 http://ip.qq.com/ 的网站中有QQ自己的JS省市区三级联动 QQ是使用引用外部JS来实现三级联动的.JS如下:http://ip.qq.com/js/geo.js <!DOC ...
- checkbox在vue中的用法小结
关于checkbox多选框是再常见不过的了,几乎很多地方都会用到,这两天在使用vue框架时需要用到checkbox多选功能,实在着实让我头疼,vue和原生checkbox用法不太一样,之前对于vue插 ...
- checkbox在vue中的用法总结
前言 关于checkbox多选框是再常见不过的了,几乎很多地方都会用到,这两天在使用vue框架时需要用到checkbox多选功能,实在着实让我头疼,vue和原生checkbox用法不太一样, 之前对于 ...
- 在Vue中由后台数据循环生成多选框CheckBox时的注意事项
多选框是一种非常常见的功能,有时候我们会根据后台返回的数据进行多选框渲染,之前做项目时遇到循环生成多选框时,v-model绑定的值会随着选中与取消改变,但页面却不会变化 的情况,后来测试了一下,发现多 ...
- vue中简单的小插曲
我们现在来学习一下vue中一些简单的小东西: 首先我们必须要引入vue.js文件哦! 1.有关文本框里的checkbox js代码: new Vue({ el:"#app", da ...
- 浅尝 Vue 中的 computed 属性 与 watch
对于 computed 的理解: ①.computed 用来监控自己定义的变量,该变量不在 data 里面声明,直接在 computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其 ...
- vue 中使用iconfont Unicode编码线上字体图标的流程
1.打开http://www.iconfont.cn官网,搜索你想要的图标.添加字体图标到购物车,点击购物车然后添加至项目,点击确定 2.点击图标管理/我的项目,找到对应的文件,点击Unicode,然 ...
- Vue中的computed属性
阅读Vue官网的过程中,对于计算属于与监听器章节的内容有点理解的不清晰:https://cn.vuejs.org/v2/guide/computed.html. 后来上网查询了资料,结合官网的说明,总 ...
随机推荐
- eclipse 出现 jar包找不到 问题记录
同事在下载maven私服项目的时候,自动更新失败.maven 一直提示 parent 更新失败但是其他的项目都是正常的,这就奇怪了. 最后 仔细查询后,发现是 同事在下载项目时候,项目是分clien ...
- SMBus Host Controller not enabled!
今天去官网下载最新的ubuntu ubuntukylin-16.10-desktop-amd64.iso,下载后vm 运行,安装后结果报了这个问题 之后google搜索得到答案: 1.复制 cp ...
- 3.获取git仓库
有两种取得 Git 项目仓库的方法. 第一种是在现有项目或目录下导入所有文件到 Git 中: 第二种是从一个服务器克隆一个现有的 Git 仓库. 在现有目录中初始化仓库 如果你打算使用 Git 来对现 ...
- undo表空间不足,ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS2'
故障现象:UNDO表空间越来越大,长此下去最终数据因为磁盘空间不足而崩溃: 问题分析:本问题在ORACLE系统管理中属于比较正常的一现象,产生问题的原因主要以下两点: 1. 有较大的事务量让Oracl ...
- shell逻辑运算符 1
逻辑卷标 表示意思 1. 关于档案与目录的侦测逻辑卷标! -f 常用!侦测『档案』是否存在 eg: if [ -f filename ] -d 常用!侦测『目录』是否存在 -b 侦测是否为一个『 bl ...
- ZT ANDROID jni 中的事件回调机制JNIenv的使用 2012-09-10 12:53:01
ANDROID jni 中的事件回调机制JNIenv的使用 2012-09-10 12:53:01 分类: 嵌入式 android framework 里java调用native,使用JNI机制,ja ...
- char *转string遇到诡异的问题记录
这个问题的背景是在用libevent的buffer_remove时出现的,写一个伪代码 char buffer[2048] ={0}; string str; int n = buffer_remov ...
- 通过ajax获取一个多位数,当容器显示在屏幕可视区时,让数字以滚动的形式显示
{ "data": "268" } json数据 <!DOCTYPE html> <html> <head lang=&quo ...
- Spring Framework5.0 学习(3)—— spring配置文件的三种形式
Spring Framework 是 IOC (Inversion of Control 控制反转)原则的实践. IoC is also known as dependency injection ...
- cannot be resolved解决方法
引言: eclipse新导入的项目经常可以看到“XX cannot be resolved to a type”的报错信息.本文将做以简单总结. 正文: (1)jdk不匹配(或不存在) 项目指定的jd ...