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


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针对DOM的应用分析(二)
Apr 15 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
Feb 04 Javascript
jQuery中hasClass()方法用法实例
Jan 06 Javascript
jQuery判断元素上是否绑定了指定事件的方法
Mar 17 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
Dec 05 Javascript
jquery ajax异步提交表单数据的方法
Oct 27 jQuery
jQuery 改变P标签文本值方法
Feb 24 jQuery
原生javascript自定义input[type=radio]效果示例
Aug 27 Javascript
js+canvas实现两张图片合并成一张图片的方法
Nov 01 Javascript
jquery获取input输入框中的值
Nov 13 jQuery
JavaScript闭包原理与用法学习笔记
May 29 Javascript
Vue中用JSON实现刷新界面不影响倒计时
Oct 26 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
用PHP来写记数器(详细介绍)
2006/10/09 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
JavaScript严格模式详解
2015/11/18 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
2016/09/08 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
如何使用three.js 制作一个三维的推箱子游戏
2020/07/29 Javascript
python 多线程串行和并行的实例
2019/02/22 Python
selenium跳过webdriver检测并模拟登录淘宝
2019/06/12 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
使用Python在Windows下获取USB PID&amp;VID的方法
2019/07/02 Python
pytorch中的embedding词向量的使用方法
2019/08/18 Python
Python箱型图处理离群点的例子
2019/12/09 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
白酒业务员岗位职责
2013/12/27 职场文书
中学校庆方案
2014/03/17 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
优秀团员个人总结
2015/02/26 职场文书
个人年终总结怎么写
2015/03/09 职场文书
行政处罚听证告知书
2015/07/01 职场文书
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python
Java 定时任务技术趋势简介
2022/05/04 Java/Android