当前位置:   article > 正文

微信小程序购物车功能实现,代码详解!_微信小程序开发中加入购物车

微信小程序开发中加入购物车

实际上,购物车的实现方式在大体上是相似的,不过小程序有其特有的一套数据层和业务层架构。在此,我将记录并分享之前我们采用的方法,希望对有需求的朋友们能提供一些参考价值。

在最开始的时候,我们会从本地存储中获取购物车的数据。因为我们会频繁地切换不同的页面,而在页面切换的过程中,我们需要实时地重新加载购物车的最新数据。因此,我们将获取数据的方法写在onShow函数中,而不是onLoad函数中:

  1. onShow: function () {
  2. const cart = wx.getStorageSync("cart");
  3. let address = wx.getStorageSync("address") ;
  4. console.log(address);
  5. this.setData({
  6. address, cart
  7. })
  8. this.loadCarts();
  9. this.countAll();
  10. }

Copy

点击按钮更改购物车的数量:

  1. handleNumEdit(e) {
  2. const { operator, goodsid } = e.target.dataset;
  3. let { cart } = this.data;
  4. cart[goodsid].count += (+operator);
  5. if (cart[goodsid].count < 1) {
  6. cart[goodsid].count = 1;
  7. wx.showModal({
  8. title: '提示',
  9. content: '您确定要删除吗',
  10. showCancel: true,
  11. cancelText: '取消',
  12. cancelColor: '#000000',
  13. confirmText: '确定',
  14. confirmColor: '#3CC51F',
  15. success: (result) => {
  16. if (result.confirm) {
  17. delete cart[goodsid];
  18. this.loadCarts();
  19. this.countAll();
  20. } else {
  21. }
  22. }
  23. });
  24. } else if (cart[goodsid].count > cart[goodsid].goods_number) {
  25. cart[goodsid].count = cart[goodsid].goods_number;
  26. wx.showToast({
  27. title: '没有库存了',
  28. icon: 'none',
  29. duration: 1500,
  30. mask: true
  31. });
  32. }
  33. this.loadCarts();
  34. this.countAll();
  35. }

Copy

加载购物车数据的方法:

  1. data: {
  2. cart: {},
  3. address: {},
  4. totalPrice: 0,
  5. categoryLength: 0,
  6. isAllChecked: true
  7. },

Copy

单个商品被选中时触发:

  1. loadCarts() {
  2. let { cart } = this.data;
  3. let isAllChecked = true;
  4. for (const key in cart) {
  5. if (cart.hasOwnProperty(key)) {
  6. const element = cart[key];
  7. if (!element.isChecked) {
  8. isAllChecked = false;
  9. break;
  10. }
  11. }
  12. }
  13. this.setData({
  14. cart,
  15. isAllChecked
  16. });
  17. },

Copy

全选和反选触发的事件:

  1. handleItemChecked(e) {
  2. let { goodsid } = e.target.dataset;
  3. let { cart } = this.data;
  4. let { isChecked } = cart[goodsid];
  5. cart[goodsid].isChecked = !isChecked;
  6. let checkedLength = 0;
  7. for (const key in cart) {
  8. if (cart.hasOwnProperty(key)) {
  9. if (cart[key].isChecked) {
  10. checkedLength++;
  11. }
  12. }
  13. }
  14. const isAllChecked = checkedLength == Object.keys(cart).length;
  15. this.countAll();
  16. this.setData({
  17. isAllChecked
  18. })
  19. },

Copy

点击结算时触发:

  1. handleItemAllChecked() {
  2. let { isAllChecked } = this.data;
  3. let { cart } = this.data;
  4. isAllChecked = !isAllChecked;
  5. for (const key in cart) {
  6. if (cart.hasOwnProperty(key)) {
  7. cart[key].isChecked = isAllChecked;
  8. }
  9. }
  10. this.setData({
  11. isAllChecked,
  12. cart
  13. })
  14. this.countAll();
  15. },

Copy

纯js代码,可能有一定小程序代码经验的会看得轻松一点。以上便可以实现在对购物车的商品进行加减和全选与反选,以及对商品进行数量合计并计算价格。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/517093
推荐阅读
相关标签
  

闽ICP备14008679号