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


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 相关文章推荐
javascript 简练的几个函数
Aug 29 Javascript
修改file按钮的默认样式实现代码
Apr 23 Javascript
IE浏览器下PNG相关功能
Jul 05 Javascript
jQuery事件详解
Feb 23 Javascript
vue分类筛选filter方法简单实例
Mar 30 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
Aug 09 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
Nov 24 Javascript
使用puppeteer破解极验的滑动验证码
Feb 24 Javascript
解决使用vue.js路由后失效的问题
Mar 17 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
Nov 19 Javascript
Vue SSR 即时编译技术的实现
May 06 Javascript
jQuery实现B2B网站后台管理系统侧导航
Jul 08 jQuery
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
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
2015/07/01 PHP
全面解析PHP操作Memcache基本函数
2016/07/14 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
2013/08/13 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
python中的字典详细介绍
2014/09/18 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
Python2包含中文报错的解决方法
2018/07/09 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
解决Atom安装Hydrogen无法运行python3的问题
2019/08/28 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
怎么解决pycharm license Acti的方法
2020/10/28 Python
乡镇交通安全实施方案
2014/03/29 职场文书
认错检讨书
2014/10/02 职场文书
办公室禁烟通知
2015/04/23 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
班委竞选稿范文
2015/11/21 职场文书
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL