Vue如何实现淘宝购物车三级选中功能
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,本文小编为大家详细介绍"Vue如何实现淘宝购物车三级选中功能",内容详细,步骤清晰,细节处理妥当,希望这篇"Vue如何实现淘宝购物车三级选中功能"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一
千家信息网最后更新 2024年09月22日Vue如何实现淘宝购物车三级选中功能
本文小编为大家详细介绍"Vue如何实现淘宝购物车三级选中功能",内容详细,步骤清晰,细节处理妥当,希望这篇"Vue如何实现淘宝购物车三级选中功能"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
实现:
1.全选时所有商品+店铺全部选中;反之全部取消选中
2.店铺选中时,当前店铺内所有商品选中;反之取消选中
3.店铺内商品全选 → 所属店铺选中;反之取消选中店铺
4.店铺+所有商品全选 → 全选按钮选中;反之取消选中
首先说明一下,我使用了vuex来管理购物车数据,所有改变按钮状态的方法都写在mutaition里
const state = { cartList: [], // 购物车列表 totalCount: 0, allChecked: false, // 全选 shopCheckedNum: 0, // 选中的店铺数量 /** * cartList: [ * { * shopName, * shopChecked: false, // 店铺选中 * proCheckedNum: 0, // 当前店铺商品选中数量 * cartGoodsInfo: [ * {iid,styleName,proChecked...} // 里边是商品的各种信息,proChecked是商品选中状态 * {...} * ] * }, * {...} * ] */};
html选择按钮部分
// 这是选择按钮,我把它封装成了一个组件 chooseClass接收父组件传值改变选中时的样式// 商品的选中按钮// 店铺的选择按钮 (我把店铺列表和商品分成了两个组件,index是传给店铺列表内商品的) // 全选按钮
商品,店铺,全选按钮的点击方法
// index:店铺索引值 key:当前商品在当前店铺内的索引值proCheckedClick(index, key) { this.$store.dispatch("ProChecked", { index, key });},shopCheckedClick(index) { this.$store.dispatch("ShopChecked", index);},allChecked() { this.$store.dispatch("AllChecked");},
mutations
// 单个商品选中proCheckedTrue(state, { index, key }) { const cartList = state.cartList; cartList[index].products[key].proChecked = true; cartList[index].proCheckedNum += 1; // 商品数量+1},// 单个商品取消选中proCheckedFalse(state, { index, key }) { const cartList = state.cartList; cartList[index].products[key].proChecked = false; cartList[index].proCheckedNum -= 1;},// 店铺选中shopCheckedTrue(state, index) { const cartList = state.cartList; cartList[index].shopChecked = true; console.log(state.shopCheckedNum); state.shopCheckedNum += 1; // 店铺数量+1},// 店铺取消选中shopCheckedFalse(state, index) { const cartList = state.cartList; cartList[index].shopChecked = false; state.shopCheckedNum -= 1;},// 全选allCheckedTrue(state) { state.allChecked = true;},// 取消全选allCheckedFalse(state) { state.allChecked = false;},
因为方法涉及到一些逻辑判断,我把逻辑判断的部分都放在了actions里
// 商品状态ProChecked({ state, commit }, { index, key }) { const cartList = state.cartList; // 这里要取反,因为此时的proChecked是点击按钮前的 !cartList[index].products[key].proChecked ? commit("proCheckedTrue", { index, key }) : commit("proCheckedFalse", { index, key }); // 商品全选,所选店铺选中 if (cartList[index].proCheckedNum === cartList[index].products.length) { commit("shopCheckedTrue", index); } // 商品没全选 → 如果店铺选中改为未选中 // (不加这个判断条件的话 本来没选中的店铺也会执行shopCheckedFalse,导致商品选中数量会-1) else if (cartList[index].shopChecked) { commit("shopCheckedFalse", index); } // 判断店铺是否全选,改变全选按钮状态 if (state.shopCheckedNum === cartList.length) { commit("allCheckedTrue"); } else { commit("allCheckedFalse"); }},// 店铺选中状态ShopChecked({ state, commit }, index) { const cartList = state.cartList; if (!cartList[index].shopChecked) { // 让店铺选中 → 将当前店铺内未选中的商品改为选中 commit("shopCheckedTrue", index); for (let k in cartList[index].products) { if (!cartList[index].products[k].proChecked) { commit("proCheckedTrue", { index, key: k }); } } } else { // 店铺取消选中 → 将当前店铺内所有商品改为未选中 commit("shopCheckedFalse", index); for (let k in cartList[index].products) { commit("proCheckedFalse", { index, key: k }); } } if (state.shopCheckedNum === cartList.length) { commit("allCheckedTrue"); } else { commit("allCheckedFalse"); }},// 全选AllChecked({ state, commit }) { const cartList = state.cartList; if (!state.allChecked) { // 全选 → 所有未选中的店铺+商品全部选中 commit("allCheckedTrue"); for (let i in cartList) { if (!cartList[i].shopChecked) { commit("shopCheckedTrue", i); } for (let k in cartList[i].products) { if (!cartList[i].products[k].proChecked) { commit("proCheckedTrue", { index: i, key: k }); } } } } else { // 取消全选 → 所有店铺+商品取消选中 commit("allCheckedFalse"); for (let i in cartList) { commit("shopCheckedFalse", i); for (let k in cartList[i].products) { commit("proCheckedFalse", { index: i, key: k }); } } }},
最开始我是把这些代码都放在了三个方法里,这样写也能实现,但是看起来实在太乱了,而且不能追踪到具体是进行了什么操作。不想搞那么多方法的可以看看
// 单个商品选中 ProChecked(state, { index, key }) { const cartList = state.cartList; // 商品选中状态取反 cartList[index].products[key].proChecked = !cartList[index].products[key].proChecked; // 如果选中,选中数量+1,取消选中则-1 if (cartList[index].products[key].proChecked) { cartList[index].proCheckedNum++; } else { cartList[index].proCheckedNum--; } // 如果商品全选,则店铺选中;否则店铺取消选中 if (cartList[index].proCheckedNum === cartList[index].products.length) { cartList[index].shopChecked = true; state.shopCheckedNum++; } else if (cartList[index].shopChecked) { cartList[index].shopChecked = false; state.shopCheckedNum--; } // 判断店铺是否全选,改变全选按钮状态 if (state.shopCheckedNum === cartList.length) { state.allChecked = true;
读到这里,这篇"Vue如何实现淘宝购物车三级选中功能"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
店铺
商品
按钮
状态
数量
购物车
购物
方法
功能
淘宝
单个
文章
组件
选择
内容
索引
逻辑
部分
中时
妥当
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器多个固态硬盘扩容
kz怎么创造服务器
前置机需要安装数据库吗
数据库触发器创建
日常办公需要建数据库吗
数据库表格和程序连接数据库
服务器桌面文件夹
河南前端软件开发大概多少钱
使用数据库保存数据的好处
会计软件开发靠谱吗
公共信息网络安全报警网站
网络安全内容手抄报有哪些
网络安全属性机密性
贵州服务器维护公司云主机
宁阳app软件开发公司
黄山电商软件开发外包公司
计算机网络技术包含学科
苹果连接服务器时出错
网络安全产业园
网络安全杯
怎样从表格中对比调用数据库
java项目数据库文件代码在哪
山西君子岛互联网科技有限公司
mysql 数据库 分词
学习通课程计算机网络技术答案
南通华信网络技术有限公司
江苏海航软件开发诚信合作
寻甸上门软件开发特价
网络安全中6x3是什么意思
久久铃声软件开发