广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >微信小程序实现简单的购物车功能
  • 326
分享到

微信小程序实现简单的购物车功能

2024-04-02 19:04:59 326人浏览 泡泡鱼
摘要

本文实例为大家分享了微信小程序实现简单购物车的具体代码,供大家参考,具体内容如下 实现一个购物车页面,需要哪些数据。整理下大概如下:一个购物车商品列表(carts),列表里的单个it

本文实例为大家分享了微信小程序实现简单购物车的具体代码,供大家参考,具体内容如下

实现一个购物车页面,需要哪些数据。整理下大概如下:
一个购物车商品列表(carts),列表里的单个item包含:商品id(id),商品图(image),商品名(title),单价(price),数量(amount),单选按钮(selected);
全选按钮,需要一个字段(selectAllStatus)表示是否全选;
总价(totalPrice);
总数量(totalNum)。
还有一个需要判断的是购物车是否为空(hasList)的字段。
购物车主要的几个功能:商品数量的加减、单选、全选、计算总价格、总数量、商品删除。

wxml代码:

<!-- 购物车商品列表 -->
<view class="list">
  <view wx:if="{{hasList}}">
    <block wx:for="{{carts}}" wx:key="id">
      <view class="item-section" bindlongpress="delItem" data-index="{{index}}">
        <!-- 单选按钮 是否选中显示不同的图标 -->
        <view class="radio-section" wx:if="{{item.selected}}" data-index="{{index}}" bindtap="changeSelect">
          <icon type="success_circle" color="#f00"></icon>
        </view>
        <view class="radio-section" wx:else  data-index="{{index}}" bindtap="changeSelect">
          <icon type="circle" color="#ccc"></icon>
        </view>
        
        <view class="cart-info">
          <view class="img">
          <!-- 图片跳转到详情页 -->
          <navigator  url="/pages/Good-detail/good-detail?productId={{item.prodId}}">
            <image src="{{item.prodPic}}" mode="aspectFill" />
          </navigator>
          </view>
          <view class="info-rt">
            <view class="title">{{item.prodName}}</view>
            <view>
              <view class="price">¥{{item.prodPrice}}</view>
              <!-- 数量加减操作 -->
              <view class="numarea">
                <text class="sign num-minus" data-types="minus" data-index="{{index}}" bindtap="changeNum">-</text>
                <text class="num-input">{{item.amount}}</text>
                <text class="sign num-plus" data-types="plus" data-index="{{index}}" bindtap="changeNum">+</text>
              </view>
            </view>
          </view>
        </view>
      </view>
    </block>
  </view>

  <view wx:else>
    <view>购物车还没有商品哦~~</view>
    <navigator open-type='switchTab' url="/pages/allproduct/allproduct" class="toShopping">去逛逛</navigator>
  </view>
</view>

<!-- 底部操作栏 -->
<view class="bottom-box">
  <view class="select-all" wx:if="{{selectAllStatus}}" data-select="{{selectAllStatus}}" bindtap="selectAll">
    <icon type="success_circle" color="#f00"></icon>
    <text>全选</text>
  </view>
  <view class="select-all" wx:else bindtap="selectAll">
    <icon type="circle" color="#ccc"></icon>
    <text>全选</text>
  </view> 
  <view class="total-price">合计:¥{{totalPrice}}</view>
  <view class="toBuy" bindtap="submitOrder" data-num ="{{totalNum}}">去结算({{totalNum}})</view>
</view>

代码实现:

初始展示购物车商品

Page({
  
    data: {
    carts: [], //购物车商品列表
    hasList: false, // 列表是否有数据
    totalPrice: 0, // 总价,初始为0
    totalNum: 0, //去结算括号里的总数量
    selectAllStatus: false, // 全选状态
    userId: '',
   },
    //根据userId得到购物车列表数据
  getList: function() {
    let that = this
    let userId = that.data.userId
    let carts = that.data.carts
    wx.request({
      url: 'xxx.com/api/ShoppinGCar/getShoppingCar?userId=' + userId,
      header: {
        'content-type': 'application/JSON'
      },
      method: 'GET',
      success: function(res) {
        console.log(res)
        let items = res.data.items
        //当购物车不为空才进行后续判断操作
        if(items !== null){
          if (items.length > 0) {
            that.setData({
              hasList: true, // 有数据了,那设为true
              carts: res.data.items,
              shoppingCarId: res.data.shoppingCarId,
              buyerId: res.data.buyerId
            })
          } else {
            console.log('购物车没有商品')
          }
        } else{
          return false
        }
      },
      fail: function(res) {},
      complete: function(res) {},
    })
  },
  
  onShow: function(){
      //onLoad 和onReady 只执行一次 所以数据放在onshow里每次打开页面都会执行
     this.getList()
     this.calcTotalPrice()
     this.totalNum()
   }
 }) 

商品数量的加减:点击+号,amount 加1,点击-号,如果amount > 1,则减1;利用wxml页面中绑定的type属性,直接在方法中判断是操作加号还是减号

//加减按钮操作
  changeNum: function(e) {
    //console.log(e)
    let that = this
    let types = e.target.dataset.types, //加和减按钮上分别设置了types属性
      index = e.target.dataset.index,
      cartsData = that.data.carts; //初始购物车列表数据
    console.log(cartsData[index])
    let amount = cartsData[index].amount
    if (types == 'minus') {
      if (amount <= 1) { //不允许购物车数量低于1
        wx.showToast({
          title: '数量不能少于1',
        })
        return false
      } else {
        amount = amount - 1
        cartsData[index].amount = amount
        //修改数量后重新渲染页面
        that.setData({
          carts: cartsData
        })
      }
    }
    if (types == 'plus') {
      amount = amount + 1
      cartsData[index].amount = amount
      that.setData({
        carts: cartsData
      })
    }
    that.calcTotalPrice()
    that.totalNum()
    wx.request({
      url: 'xxx.com/api/ShoppingCarItem/uptTransItem',
      data: {
        "transItemId": cartsData[index].transItemId,
        "prodId": cartsData[index].prodId,
        "amount": cartsData[index].amount,
        "shoppingCarId": cartsData[index].shoppingCarId
      },
      header: {
        'content-type': 'application/json'
      },
      method: 'POST',
      success: function(res) {
        console.log(res)
      },
      fail: function(res) {},
      complete: function(res) {},
    })
  },

单选事件:

//单个商品选中事件
changeSelect: function(e) {
    //console.log(e)
    let cartsData = this.data.carts
    let index = e.currentTarget.dataset.index
    //切换选中状态
    cartsData[index].selected = !cartsData[index].selected
    // 循环数组数据,判断----选中/未选中[selected]
    //新定义一个flag, 当循环商品的选中状态为true,flag+1;所有商品都为选中状态,则为全选
    let flag = 0
    for (let i = 0, len = cartsData.length; i < len; i++) {
      if (cartsData[i].selected == true) {
        flag += 1
      }
    }
    if (cartsData.length == flag) {
      this.data.selectAllStatus = true;
    } else {
      this.data.selectAllStatus = false;
    }
    this.setData({
      carts: cartsData,
      selectAllStatus: this.data.selectAllStatus
    })
    this.calcTotalPrice()
    this.totalNum()
  },

全选事件:

//购物车全选按钮
  selectAll: function(e) {
    //console.log(e)
    let selectAllStatus = e.currentTarget.dataset.select; //先判断是否为全选
    let cartsData = this.data.carts
    //将true 转为 false(所有商品未选中状态)
    selectAllStatus = !selectAllStatus
    for (let i = 0, len = cartsData.length; i < len; i++) {
      cartsData[i].selected = selectAllStatus
    }
    // 页面重新渲染
    this.setData({
      selectAllStatus: selectAllStatus,
      carts: cartsData
    })
    this.calcTotalPrice()
    this.totalNum()
  },

计算总价格:

//计算商品总价
//总价 = 选中的商品1的 价格 * 数量 + 选中的商品2的 价格 * 数量 + ...
  calcTotalPrice: function() {
    //获取商品列表数据
    let cartsData = this.data.carts
    //声明一个变量接收数组列表price
    let total = 0
    for (let i = 0, len = cartsData.length; i < len; i++) {
      if (cartsData[i].selected) { //判断选中才会计算价格
        total += cartsData[i].amount * cartsData[i].prodPrice;
      }
    }
    this.setData({ // 最后赋值到data中渲染到页面
      carts: cartsData,
      totalPrice: total.toFixed(2)
    });
  },

计算总数量:

//总数量
  totalNum: function() {
    let cartsData = this.data.carts
    //新定义初始变量
    let totalNum = 0
    for (let i = 0, len = cartsData.length; i < len; i++) {
      if (cartsData[i].selected) {
        totalNum += cartsData[i].amount
      }
    }
    this.setData({
      totalNum: totalNum
    })
  },

删除单个商品:

//删除商品
  delItem: function(e) {
    //console.log(e)
    let that = this
    let cartsData = that.data.carts
    let index = e.currentTarget.dataset.index
    wx.request({
      url: 'xxx.com/api/ShoppingCarItem/delTransItem?value=' + cartsData[index].transItemId,
      header: {
        'content-type': 'application/json'
      },
      method: 'POST',
      success: function(res) {
        console.log(res)
        wx.showModal({
          title: '提示',
          content: '确认删除吗',
          success: function(res) {
        console.log(res)
        wx.showModal({
          title: '提示',
          content: '确认删除吗',
          success: function(res) {
            console.log(res)
            if (res.confirm) {
              cartsData.splice(index, 1)  //删除购物车列表里这个商品
              that.setData({
                carts: cartsData
              })
              that.calcTotalPrice()
              that.totalNum()
              // 如果购物车为空
              if (cartsData.length == 0) {
                that.setData({ //修改标识为false,显示购物车为空页面
                  hasList: false
                });
              }
            }
          }
        })
      },
      fail: function(res) {},
      complete: function(res) {},
    })
  },

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: 微信小程序实现简单的购物车功能

本文链接: https://www.lsjlt.com/news/164669.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 微信小程序实现简单购物车小功能
    本文实例为大家分享了微信小程序实现简单购物车的具体代码,供大家参考,具体内容如下 微信小程序定制好看的购物车页面,实现购物车功能,希望对您有所帮助! 1. 应用场景2. 思路分析3....
    99+
    2022-11-13
  • 微信小程序实现简单的购物车功能
    本文实例为大家分享了微信小程序实现简单购物车的具体代码,供大家参考,具体内容如下 实现一个购物车页面,需要哪些数据。整理下大概如下:一个购物车商品列表(carts),列表里的单个it...
    99+
    2022-11-13
  • 微信小程序中如何实现购物车功能
    小编给大家分享一下微信小程序中如何实现购物车功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!需求先来弄清楚购物车的需求。单选、...
    99+
    2022-10-19
  • Python实现简单购物车小程序
    本文实例为大家分享了Python实现简单购物车小程序的具体代码,供大家参考,具体内容如下 要求 代码 # --*--coding:utf-8--*-- # Author: 村雨 ...
    99+
    2022-11-13
  • 微信小程序购物车功能如何开发
    这篇“微信小程序购物车功能如何开发”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“微信小程序购物车功能如何开发”文章吧。ind...
    99+
    2023-06-26
  • 微信小程序实现购物车页面
    微信小程序实现购物车页面,供大家参考,具体内容如下 先来弄清楚购物车的需求。 单选、全选和取消,而且会随着选中的商品计算出总价单个商品购买数量的增加和减少删除商品。当购物车为空时,...
    99+
    2022-11-13
  • Android实现简单购物车功能
    本文实例为大家分享了Android实现购物车功能的具体代码,供大家参考,具体内容如下MainActivity布局:<?xml version="1.0" encoding="utf-8"?><LinearL...
    99+
    2023-05-30
    android 购物车 roi
  • 微信小程序中如何实现购物车
    这篇文章给大家分享的是有关微信小程序中如何实现购物车的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。先上效果图购物车实现cart.wxml<import src=&...
    99+
    2022-10-19
  • vuex实现简单的购物车功能
    本文实例为大家分享了vuex实现购物车功能的具体代码,供大家参考,具体内容如下 文件目录如下: 购物车组件 <template> <div> ...
    99+
    2022-11-12
  • vue实现简单的购物车功能
    本文实例为大家分享了vue实现简单购物车功能的具体代码,供大家参考,具体内容如下 1.实现效果: 2.涉及到的知识点: toFixed函数、过滤器、reduce高阶函数、v-bin...
    99+
    2022-11-13
  • Python如何实现简单购物车小程序
    小编给大家分享一下Python如何实现简单购物车小程序,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下要求代码# --*--coding:utf-8--*--# Author: 村雨...
    99+
    2023-06-29
  • Android中RecyclerView实现简单购物车功能
    Android中RecyclerView实现简单的购物车,供大家参考,具体内容如下 我们知道在ListView中用setTag来解决Item的复用问题,但是RecyclerView中...
    99+
    2022-11-13
  • 利用session实现简单购物车功能
    本文实例为大家分享了利用session实现简单购物车功能的具体代码,供大家参考,具体内容如下 一、实现的功能 (1) 利用session实现购物车中的物品添加。(2)使用servle...
    99+
    2022-11-13
  • vue简单实现购物车结算功能
    本文实例为大家分享了vue简单实现购物车结算的具体代码,供大家参考,具体内容如下 样式没有写 <template>  <div class="about cont...
    99+
    2022-11-13
  • php实现简单加入购物车功能
    以下是一个简单的PHP代码示例,实现了一个简单的加入购物车功能。```php```使用上述代码,可以通过发送POST请求将商品加入购...
    99+
    2023-08-15
    PHP
  • vuex怎么实现简单的购物车功能
    这篇“vuex怎么实现简单的购物车功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue...
    99+
    2022-10-19
  • vue如何实现简单的购物车功能
    这篇文章主要介绍“vue如何实现简单的购物车功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue如何实现简单的购物车功能”文章能帮助大家解决问题。1.实现效果:2.涉及到的知识点:toFixed...
    99+
    2023-07-02
  • 小程序如何实现商城购物车功能
    这篇文章将为大家详细讲解有关小程序如何实现商城购物车功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。布局分析:首先一个list的主盒子,接着是item盒子,这是必须的。然后把item分成左侧的图片部分,...
    99+
    2023-06-26
  • Python如何实现的简单购物车程序
    购物车程序需求: 用户输入购物预算 展示商品列表 用户购买商品,每次购买后提示用户购买信息和剩余预算 购物完成后打印购物花费和购物清单,并将商品从原列表移除 实现代码如下: #...
    99+
    2022-06-02
    python 购物车 python 购物车程序
  • 微信小程序实现简单搜索功能
    本文实例为大家分享了微信小程序实现简单搜索功能的具体代码,供大家参考,具体内容如下 搜索效果图 实现功能如下 (1) 未找到商品时显示提示信息,找到商品时显示商品列表 (2) 清空...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作