在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. 后来上网查询了资料,结合官网的说明,总 ...
随机推荐
- Java链接 Oracle11g R2
菜鸟学习Oracle数据库,使用Java代码链接数据库. 首先要配置Eclipse,在新建的工程中,Package Explorer->工程名->Build path->Add ex ...
- JAVA程序编写入门
在任意文件夹下创建一个文本,然后重命名,把文本后缀名改为.java.然后用eclipse打开此文件编写程序内容. public class nihao{ public static void main ...
- qt 创建资源文件
我们编写的gui可能需要一些额外的资源(比如贴图用的图片),可用资源文件统一管理.以下以图片为例. 用qt creator 打开工程,为工程新建资源文件: 命名为“项目名.prc”,(此处为“cloc ...
- 64位Navicat Premium-11.2.7(64bit)访问64位Oracle服务器
1 在windows 10 64位操作系统安装Navicat Premium-11.2.7(64bit). 2 在服务器安装64位的Oracle(win64_11gR2_database). 3 在h ...
- Python 爬虫 根据属性值关键字搜索标签
# <div class='\"name\"'>客如云</div> company_name = soup.find_all('div',class_=re ...
- C++中虚继承的作用及底层实现原理
http://blog.csdn.net/bxw1992/article/details/77726390
- sqlite 用法整理
转载:http://blog.csdn.net/zhaoweixing1989/article/details/19080593 先纪录到这,以后慢慢整理. 1. 在Android下通过adb she ...
- July 19th 2017 Week 29th Wednesday
Rather than envy others, it is better to speed up their own pace. 与其羡慕他人,不如加快自己的脚步. The envy of othe ...
- 使用NPOI进行Excel数据的导入导出
- 学习WebSocket一(WebSocket初识)
Java EE 7 去年刚刚发布了JSR356规范,使得WebSocket的Java API得到了统一,Tomcat从7.0.47开始支持JSR356,这样一来写WebSocket的时候,所用的代码都 ...