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


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 extend 的简单实例
Sep 18 Javascript
浅谈js内置对象Math的属性和方法(推荐)
Sep 19 Javascript
概述jQuery的元素筛选
Nov 23 Javascript
js实现tab选项卡切换功能
Jan 13 Javascript
详解jQuery事件
Jan 13 Javascript
无法获取隐藏元素宽度和高度的解决方案
Mar 07 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
Apr 11 Javascript
js事件委托和事件代理案例分享
Jul 25 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
May 02 Javascript
基于rollup的组件库打包体积优化小结
Jun 18 Javascript
vue安装和使用scss及sass与scss的区别详解
Oct 15 Javascript
vue中如何自定义右键菜单详解
Dec 08 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
基于MySQL体系结构的分析
2013/05/02 PHP
解析smarty模板中类似for的功能实现
2013/06/18 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
javascript addBookmark 加入收藏 多浏览器兼容
2009/08/15 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
js 处理数组重复元素示例代码
2013/12/27 Javascript
JavaScript获得页面base标签中url的方法
2015/04/03 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
Mvc提交表单的四种方法全程详解
2016/08/10 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
python3.5基于TCP实现文件传输
2020/03/20 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
初二物理教学反思
2014/01/29 职场文书
学生自我评语大全
2014/04/18 职场文书
关于学习的演讲稿
2014/05/10 职场文书
食品流通安全承诺书
2014/05/22 职场文书
生日庆典策划方案
2014/06/02 职场文书
营销经理工作检讨书
2014/11/03 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
创业计划书之美容店
2019/09/16 职场文书
JavaScript中关于预编译、作用域链和闭包的理解
2021/03/31 Javascript
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
nginx中proxy_pass各种用法详解
2021/11/07 Servers
angular异步验证器防抖实例详解
2022/03/31 Javascript
海弦WR-800F
2022/04/05 无线电