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


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无阻塞加载具体方式
Jun 28 Javascript
javaScript函数中执行C#代码中的函数方法总结
Aug 07 Javascript
js正则表达exec与match的区别说明
Jan 29 Javascript
javascript页面上使用动态时间具体实现
Mar 18 Javascript
JQuery包裹DOM节点的方法
Jun 11 Javascript
jQuery判断checkbox选中状态
May 12 Javascript
canvas滤镜效果实现代码
Feb 06 Javascript
js获取文件里面的所有文件名(实例)
Oct 17 Javascript
React路由管理之React Router总结
May 10 Javascript
package.json配置文件构成详解
Aug 27 Javascript
vue解决使用$http获取数据时报错的问题
Oct 30 Javascript
深入浅析vue全局环境变量和模式
Apr 28 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
php5 mysql分页实例代码
2008/04/10 PHP
php获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
学习php分页代码实例
2013/10/24 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
浅析php创建者模式
2014/11/25 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
js右键菜单效果代码
2007/07/21 Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
如何解决vue与传统jquery插件冲突
2017/03/20 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
vue 自定义提示框(Toast)组件的实现代码
2018/08/17 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
Python及Django框架生成二维码的方法分析
2018/01/31 Python
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
python绘制玫瑰的实现代码
2020/03/02 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
使用HTML5和CSS3制作一个模态框的示例
2018/03/07 HTML / CSS
东方电视购物:东方CJ
2016/10/12 全球购物
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
马云北大演讲完整版:真心话,什么才是阿里的核心竞争力?
2014/04/04 职场文书
出纳试用期自我鉴定
2014/04/07 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
会计求职自荐信
2014/06/20 职场文书
新西兰:最新留学学习计划书写作指南
2019/07/15 职场文书
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
python scrapy简单模拟登录的代码分析
2021/07/21 Python
SQL Server表分区删除详情
2021/10/16 SQL Server
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android