微信小程序实现购物车代码实例详解


Posted in Javascript onAugust 29, 2019

其实购物车都是类似的实现方法,只不过小程序是有他的数据层和业务层,在这里把之前的做法记录一下,分享出来也希望能给需要的小伙伴带来参考价值在最开始的时候先从本地存储中获取购物车数据,因为我们会切换页面 在页面切换的过程中需要实时重新加载购物车的数据,所以我们把获取的方法写在onShow中,而不是onLoad中:

onShow: function () {
  const cart = wx.getStorageSync("cart");
  let address = wx.getStorageSync("address") ;
  console.log(address);
  this.setData({
   address, cart
  })
  this.loadCarts();
  this.countAll();
 }

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

handleNumEdit(e) {
  const { operator, goodsid } = e.target.dataset;
  let { cart } = this.data;
  cart[goodsid].count += (+operator);
  if (cart[goodsid].count < 1) {
   cart[goodsid].count = 1;
   wx.showModal({
    title: '提示',
    content: '您确定要删除吗',
    showCancel: true,
    cancelText: '取消',
    cancelColor: '#000000',
    confirmText: '确定',
    confirmColor: '#3CC51F',
    success: (result) => {
     if (result.confirm) {
      delete cart[goodsid];
      this.loadCarts();
      this.countAll();
     } else {
     }
    }
   });
  } else if (cart[goodsid].count > cart[goodsid].goods_number) {
   cart[goodsid].count = cart[goodsid].goods_number;
   wx.showToast({
    title: '没有库存了',
    icon: 'none',
    duration: 1500,
    mask: true
   });
  }
  this.loadCarts();
  this.countAll();
 }

加载购物车数据的方法:

data: {
  cart: {},
  address: {},
  totalPrice: 0,
  categoryLength: 0,
  isAllChecked: true
 },

单个商品被选中时触发:

loadCarts() {
  let { cart } = this.data;
  let isAllChecked = true;
  for (const key in cart) {
   if (cart.hasOwnProperty(key)) {
    const element = cart[key];
    if (!element.isChecked) {
     isAllChecked = false;
     break;
    }
   }
  }
  this.setData({
   cart,
   isAllChecked
  });
 },

全选和反选触发的事件:

handleItemChecked(e) {
  let { goodsid } = e.target.dataset;
  let { cart } = this.data;
  let { isChecked } = cart[goodsid];
  cart[goodsid].isChecked = !isChecked;
  let checkedLength = 0;
  for (const key in cart) {
   if (cart.hasOwnProperty(key)) {
    if (cart[key].isChecked) {
     checkedLength++;
    }
   }
  }
  const isAllChecked = checkedLength == Object.keys(cart).length;
  this.countAll();
  this.setData({
   isAllChecked
  })
 },

点击结算时触发:

handleItemAllChecked() {
  let { isAllChecked } = this.data;
  let { cart } = this.data;
  isAllChecked = !isAllChecked;
  for (const key in cart) {
   if (cart.hasOwnProperty(key)) {
    cart[key].isChecked = isAllChecked;
   }
  }
  this.setData({
   isAllChecked,
   cart
  })
  this.countAll();
 },

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jquery的分页控件(C#)
Jan 06 Javascript
jquery获取焦点和失去焦点事件代码
Apr 21 Javascript
推荐25个超炫的jQuery网格插件
Nov 28 Javascript
node.js中的fs.lchown方法使用说明
Dec 16 Javascript
JavaScript实现N皇后问题算法谜题解答
Dec 29 Javascript
javascript检测两个数组是否相似
May 19 Javascript
javascript Promise简单学习使用方法小结
May 17 Javascript
jQuery Position方法使用和兼容性
Aug 23 jQuery
vue添加class样式实例讲解
Feb 12 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
Mar 05 Javascript
详解vue中router-link标签所必备了解的属性
Apr 15 Javascript
Vite和Vue CLI的优劣
Jan 30 Vue.js
vue图片加载失败时用默认图片替换的方法
Aug 29 #Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
Aug 29 #Javascript
Angular8路由守卫原理和使用方法
Aug 29 #Javascript
Vue中的循环及修改差值表达式的方法
Aug 29 #Javascript
vue父子组件通信的高级用法示例
Aug 29 #Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
Aug 28 #Javascript
JS中async/await实现异步调用的方法
Aug 28 #Javascript
You might like
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
jQuery常用数据处理方法小结
2015/02/20 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
JavaScript中string对象
2015/06/12 Javascript
javascript生成不重复的随机数
2015/07/17 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
javascript中arguments,callee,caller详解
2016/03/16 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
使用Python操作excel文件的实例代码
2017/10/15 Python
学习Python selenium自动化网页抓取器
2018/01/20 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
通过代码实例了解Python sys模块
2020/09/14 Python
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
个人简历自荐信
2013/12/05 职场文书
洗煤厂厂长岗位职责
2014/01/03 职场文书
艺人经纪人岗位职责
2014/04/15 职场文书
大跃进口号
2014/06/16 职场文书
土建施工员岗位职责
2014/07/16 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android
Python借助with语句实现代码段只执行有限次
2022/03/23 Python
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers