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


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 01 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
Aug 01 Javascript
利用jQuery实现可输入搜索文字的下拉框
Oct 23 Javascript
js查找某元素中的所有图片地址的方法
Jan 16 Javascript
深入理解JS中的substr和substring
Apr 26 Javascript
javascript 常用验证函数总结
Jun 28 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
Nov 04 Javascript
你真的了解BOM中的history对象吗
Feb 13 Javascript
vue+element模态框中新增模态框和删除功能
Jun 11 Javascript
Javascript实现html转pdf高清版(提高分辨率)
Feb 19 Javascript
浅谈js中的attributes和Attribute的用法与区别
Jul 16 Javascript
vue css 相对路径导入问题级踩坑记录
Jun 05 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
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
php接口和抽象类使用示例详解
2014/03/02 PHP
php断点续传之如何分割合并文件
2014/03/22 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
jquery 问答知识整理
2010/02/11 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
Echarts之悬浮框中的数据排序问题
2018/11/08 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
PyCharm设置SSH远程调试的方法
2018/07/17 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
比利时买床:Beter Bed
2017/12/06 全球购物
公司营业员的工作总结自我评价
2013/10/05 职场文书
毕业生优秀推荐信
2013/11/26 职场文书
教师年度考核自我鉴定
2014/01/19 职场文书
英文求职信写作小建议
2014/02/16 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
学期个人自我总结
2015/02/13 职场文书
2015年外联部工作总结
2015/04/03 职场文书
银行资信证明
2015/06/17 职场文书
2015年学校综合治理工作总结
2015/07/20 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL