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


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 相关文章推荐
一个小型js框架myJSFrame附API使用帮助
Jun 28 Javascript
ext checkboxgroup 回填数据解决
Aug 21 Javascript
实现只能输入数字的input不用replace方法
Sep 12 Javascript
DOM 事件流详解
Jan 20 Javascript
js的三种继承方式详解
Jan 21 Javascript
详解nuxt sass全局变量(公共scss解决方案)
Jun 27 Javascript
JavaScript插入排序算法原理与实现方法示例
Aug 06 Javascript
angular2 组件之间通过service互相传递的实例
Sep 30 Javascript
关于微信公众号开发无法支付的问题解决
Dec 28 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
Jan 18 jQuery
layUI实现列表查询功能
Jul 27 Javascript
p5.js码绘“跳动的小正方形”的实现代码
Oct 22 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
BBS(php &amp; mysql)完整版(四)
2006/10/09 PHP
PHP MSSQL 存储过程的方法
2008/12/24 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
php常见的魔术方法详解
2014/12/25 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
9个比较实用的php代码片段
2016/03/15 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
extjs之去除s.gif的影响
2010/12/25 Javascript
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
jQuery自定义数值抽奖活动代码
2016/06/11 Javascript
AngularJS ng-repeat数组有重复值的解决方法
2016/10/23 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
树莓派实现移动拍照
2019/06/22 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
Python如何实现邮件功能
2020/05/27 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
介绍一下#error预处理
2015/09/25 面试题
岗位竞聘演讲稿范文
2014/04/24 职场文书
十岁生日答谢词
2015/01/05 职场文书