Vue如何实现淘宝购物车三级选中功能
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本文小编为大家详细介绍"Vue如何实现淘宝购物车三级选中功能",内容详细,步骤清晰,细节处理妥当,希望这篇"Vue如何实现淘宝购物车三级选中功能"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一
千家信息网最后更新 2026年11月04日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安全错误
数据库的锁怎样保障安全
喔噻互联网科技有限公司
中国 科技 互联网
广州凡科互联网科技
米客互联网科技
伴你行互联网科技有限公司
互联网科技咨询
中国航天科技大学国际工业互联网
互联网媒体平台算高科技产业
开一家科技互联网公司需要多少钱
中国互联网公司排名锤子科技
互联网科技的全部知识
科技赋能视角下互联网保险发展
上海互联网科技公司ppt
上海乐五互联网科技有限公司
宁波跨境商互联网科技有限公司
广东鹅鹅鹅互联网科技有限公司
互联网科技接地气
陕西九四连强互联网科技有限公司
好易买互联网科技
上海互联网科技园景观
什么是科技互联网
互联网科技公司的优势
唐信互联网科技 大连
互联网科技logo
互联网科技创新企业排名
互联网媒体平台算高科技产业
996高科技互联网公司
互联网科技年终奖
广州有谷有贝互联网科技有限公司
湖北辰鑫科技互联网