<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了微信小程式實現簡單購物車的具體程式碼,供大家參考,具體內容如下
實現一個購物車頁面,需要哪些資料。整理下大概如下:
一個購物車商品列表(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) {}, }) },
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45