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


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 相关文章推荐
解决html按钮切换绑定不同函数后点击时执行多次函数问题
May 14 Javascript
javascript中的Base64、UTF8编码与解码详解
Mar 18 Javascript
原生JS实现拖拽图片效果
Aug 27 Javascript
JS Attribute属性操作详解
May 19 Javascript
浅析JS获取url中的参数实例代码
Jun 14 Javascript
微信小程序 底部导航栏目开发资料
Dec 05 Javascript
Node.js用readline模块实现输入输出
Dec 16 Javascript
Vue制作Todo List网页
Apr 26 Javascript
js实现本地时间同步功能
Aug 26 Javascript
Vue中的无限加载vue-infinite-loading的方法
Apr 08 Javascript
node.js实现为PDF添加水印的示例代码
Dec 05 Javascript
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
May 30 Javascript
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
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
2010/03/27 PHP
php自动加载的两种实现方法
2010/06/21 PHP
PHP之预定义接口详解
2015/07/29 PHP
SESSION存放在数据库用法实例
2015/08/08 PHP
Zend Framework缓存Cache用法简单实例
2016/03/19 PHP
PHP htmlspecialchars_decode()函数用法讲解
2019/03/01 PHP
js 提交和设置表单的值
2008/12/19 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
jQuery 监控键盘一段时间没输入
2016/04/22 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
2019/10/24 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
Vue实现购物车实例代码两则
2020/05/30 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
Vue实现返回顶部按钮实例代码
2020/10/21 Javascript
python使用cookie库操保存cookie详解
2014/03/03 Python
Python中处理unchecked未捕获异常实例
2015/01/17 Python
pandas中去除指定字符的实例
2018/05/18 Python
值得收藏的10道python 面试题
2019/04/15 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
2020/04/12 Python
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
农民工工资支付承诺函
2014/03/31 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
Python中22个万用公式的小结
2021/07/21 Python
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript
以下牛机,你有几个
2022/04/05 无线电