前言
以往的購物車,基本上都是透過大量的 DOM 操作來實現(xiàn)。微信小程式其實跟 vue.js 的用法非常像,接下來就來看看小程式可以怎麼實作購物車功能。
需求
先來弄清楚購物車的需求。
單選、全選和取消,而且會隨著選取的商品計算出總價
單一商品購買數(shù)量的增加和減少
刪除商品。當購物車為空時,頁面會變成空購物車的佈局
根據(jù)設(shè)計圖,我們可以先實作靜態(tài)頁面。接下來,再看看一個購物車需要什麼樣的數(shù)據(jù)。
首先是一個商品列表(carts),清單裡的單品需要:商品圖(image),商品名(title),單價(price),數(shù)量(num),是否選取(selected),商品id(id)
然後左下角的全選,需要一個欄位(selectAllStatus)表示是否全選了
#右下角的總價(totalPrice)
最後需要知道購物車是否為空(hasList)
知道了需要這些數(shù)據(jù),在頁面初始化的時候我們先定義好這些。
程式碼實作
初始化
Page({ ????data:?{ ????????carts:[],???????????????//?購物車列表 ????????hasList:false,??????????//?列表是否有數(shù)據(jù) ????????totalPrice:0,???????????//?總價,初始為0 ????????selectAllStatus:true????//?全選狀態(tài),默認全選 ????}, ????onShow()?{ ????????this.setData({ ??????????hasList:?true,????????//?既然有數(shù)據(jù)了,那設(shè)為true吧 ??????????carts:[ ????????????{id:1,title:'新鮮芹菜?半斤',image:'/image/s5.png',num:4,price:0.01,selected:true}, ????????????{id:2,title:'素米?500g',image:'/image/s6.png',num:1,price:0.03,selected:true} ??????????] ????????}); ??????}, })
購物車列表資料我們一般是透過請求伺服器拿到的數(shù)據(jù),所以我們放在生命週期函數(shù)裡給 carts 賦值。想到每次進到購物車都要獲取購物車的最新狀態(tài),而onLoad和onReady只在初始化的時候執(zhí)行一次,所以我需要把請求放在 onShow 函數(shù)裡。 (這裡先拿點假資料冒充一下吧)
佈局 wxml
修好之前寫好的靜態(tài)頁面,綁定資料。
?<view class="cart-box"> ????<!-- wx:for 渲染購物車列表 --> ????<view wx:for="{{carts}}"> ???? ????????<!-- wx:if 是否選擇顯示不同圖標 --> ????????<icon wx:if="{{item.selected}}" type="success" color="red" bindtap="selectList" data-index="{{index}}" /> ????????<icon wx:else type="circle" bindtap="selectList" data-index="{{index}}"/> ???????? ????????<!-- 點擊商品圖片可跳轉(zhuǎn)到商品詳情 --> ????????<navigator url="../details/details?id={{item.id}}"> ????????????<image class="cart-thumb" src="{{item.image}}"></image> ????????</navigator> ???????? ????????<text>{{item.title}}</text> ????????<text>¥{{item.price}}</text> ???????? ????????<!-- 增加減少數(shù)量按鈕 --> ????????<view> ????????????<text bindtap="minusCount" data-index="{{index}}">-</text> ????????????<text>{{item.num}}</text> ????????????<text bindtap="addCount" data-index="{{index}}">+</text> ????????</view> ???????? ????????<!-- 刪除按鈕 --> ????????<text bindtap="deleteList" data-index="{{index}}">?×?</text> ????</view> </view> <!-- 底部操作欄 --> <view> ????<!-- wx:if 是否全選顯示不同圖標 --> ????<icon wx:if="{{selectAllStatus}}" type="success_circle" color="#fff" bindtap="selectAll"/> ????<icon wx:else type="circle" color="#fff" bindtap="selectAll"/> ????<text>全選</text> ???? ????<!-- 總價 --> ????<text>¥{{totalPrice}}</text> </view>
計算總價
總價= 選取的商品1的價格* 數(shù)量選取的商品2的價格* 數(shù)量...
根據(jù)公式,可以得到
getTotalPrice()?{ ????let?carts?=?this.data.carts;??????????????????//?獲取購物車列表 ????let?total?=?0; ????for(let?i?=?0;?i<carts.length; i++) { // 循環(huán)列表得到每個數(shù)據(jù) if(carts[i].selected) { // 判斷選中才會計算價格 total += carts[i].num * carts[i].price; // 所有價格加起來 } } this.setData({ // 最后賦值到data中渲染到頁面 carts: carts, totalPrice: total.toFixed(2) }); }
頁面中的其他操作會導(dǎo)致總價格變動的都需要呼叫該方法。
選擇事件
點擊時選中,再點擊又變成沒選中狀態(tài),其實就是改變 selected 欄位。透過 data-index="{{index}}" 把目前商品在清單陣列中的下標傳給事件。
<p>selectList(e) {<br/> const index = e.currentTarget.dataset.index; // 獲取data- 傳進來的index<br/> let carts = this.data.carts; // 獲取購物車列表<br/> const selected = carts[index].selected; // 獲取當前商品的選中狀態(tài)<br/> carts[index].selected = !selected; // 改變狀態(tài)<br/> this.setData({<br/> carts: carts<br/> });<br/> this.getTotalPrice(); // 重新獲取總價<br/>}<br/></p>
全選事件
全選就是根據(jù)全選狀態(tài)selectAllStatus 去改變每個商品的selected
<p>selectAll(e) {<br/> let selectAllStatus = this.data.selectAllStatus; // 是否全選狀態(tài)<br/> selectAllStatus = !selectAllStatus;<br/> let carts = this.data.carts;<br/><br/> for (let i = 0; i < carts.length; i++) {<br/> carts[i].selected = selectAllStatus; // 改變所有商品狀態(tài)<br/> }<br/> this.setData({<br/> selectAllStatus: selectAllStatus,<br/> carts: carts<br/> });<br/> this.getTotalPrice(); // 重新獲取總價<br/>}<br/></p>
增減數(shù)量
點擊號, num加1,點選-號,如果num > 1,則減1
<p>// 增加數(shù)量<br>addCount(e) {<br> ? ?const index = e.currentTarget.dataset.index;<br> ? ?let carts = this.data.carts;<br> ? ?let num = carts[index].num;<br> ? ?num = num + 1;<br> ? ?carts[index].num = num;<br> ? ?this.setData({<br> ? ? ?carts: carts<br> ? ?});<br> ? ?this.getTotalPrice();<br>},<br>// 減少數(shù)量<br>minusCount(e) {<br> ? ?const index = e.currentTarget.dataset.index;<br> ? ?let carts = this.data.carts;<br> ? ?let num = carts[index].num;<br> ? ?if(num <= 1){<br> ? ? ?return false;<br> ? ?}<br> ? ?num = num - 1;<br> ? ?carts[index].num = num;<br> ? ?this.setData({<br> ? ? ?carts: carts<br> ? ?});<br> ? ?this.getTotalPrice();<br>}<br></p>
刪除商品
點擊刪除按鈕則從購物車清單中刪除目前元素,刪除之後如果購物車為空,改變購物車為空標識hasList為false
deleteList(e)?{ ????const?index?=?e.currentTarget.dataset.index; ????let?carts?=?this.data.carts; ????carts.splice(index,1);??????????????//?刪除購物車列表里這個商品 ????this.setData({ ????????carts:?carts ????}); ????if(!carts.length){??????????????????//?如果購物車為空 ????????this.setData({ ????????????hasList:?false??????????????//?修改標識為false,顯示購物車為空頁面 ????????}); ????}else{??????????????????????????????//?如果不為空 ????????this.getTotalPrice();???????????//?重新計算總價格 ????}??? }
總結(jié)
#雖然一個購物車功能比較簡單,但是裡面涉及到微信小程式的知識點還是比較多的,適合新手練習掌握。
推薦教學(xué):《微信小程式》
以上是微信小程序之購物車功能實現(xiàn)的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

閒魚官方微信小程式悄悄上線,在小程式中可以發(fā)布閒置與買家/賣家私訊交流、查看個人資料及訂單、搜尋物品等,有用好奇閒魚微信小程式叫什麼,現(xiàn)在快來看一下。閒魚微信小程式叫什麼答案:閒魚,閒置交易二手買賣估價回收。 1、在小程式中可以發(fā)布閒置、與買家/賣家私訊交流、查看個人資料及訂單、搜尋指定物品等功能;2、在小程式的頁面中有首頁、附近、發(fā)閒置、訊息、我的5項功能;3、想要使用的話必要要開通微信支付才可以購買;

實現(xiàn)微信小程式中的圖片濾鏡效果隨著社群媒體應(yīng)用程式的流行,人們越來越喜歡在照片中應(yīng)用濾鏡效果,以增強照片的藝術(shù)效果和吸引力。在微信小程式中也可以實現(xiàn)圖片濾鏡效果,為使用者提供更多有趣和創(chuàng)意的照片編輯功能。本文將介紹如何在微信小程式中實現(xiàn)圖片濾鏡效果,並提供具體的程式碼範例。首先,我們需要在微信小程式中使用canvas元件來載入和編輯圖片。 canvas元件可以在頁面

實現(xiàn)微信小程式中的下拉式選單效果,需要具體程式碼範例隨著行動互聯(lián)網(wǎng)的普及,微信小程式成為了網(wǎng)路開發(fā)的重要一環(huán),越來越多的人開始關(guān)注和使用微信小程式。微信小程式的開發(fā)相比傳統(tǒng)的APP開發(fā)更加簡單快捷,但也需要掌握一定的開發(fā)技巧。在微信小程式的開發(fā)中,下拉式選單是一個常見的UI元件,實現(xiàn)了更好的使用者操作體驗。本文將詳細介紹如何在微信小程式中實現(xiàn)下拉式選單效果,並提供具

閒魚官方微信小程式已經(jīng)悄悄上線,它為用戶提供了一個便捷的平臺,讓你可以輕鬆地發(fā)布和交易閒置物品。在小程式中,你可以與買家或賣家進行私訊交流,查看個人資料和訂單,以及搜尋你想要的物品。那麼閒魚在微信小程式中究竟叫什麼呢,這篇教學(xué)攻略將為您詳細介紹,想要了解的用戶們快來跟著本文繼續(xù)閱讀吧!閒魚微信小程式叫什麼答案:閒魚,閒置交易二手買賣估價回收。 1、在小程式中可以發(fā)布閒置、與買家/賣家私訊交流、查看個人資料及訂單、搜尋指定物品等功能;2、在小程式的頁面中有首頁、附近、發(fā)閒置、訊息、我的5項功能;3、

微信小程式實現(xiàn)圖片上傳功能隨著行動網(wǎng)路的發(fā)展,微信小程式已經(jīng)成為了人們生活中不可或缺的一部分。微信小程式不僅提供了豐富的應(yīng)用場景,還支援開發(fā)者自訂功能,其中包括圖片上傳功能。本文將介紹如何在微信小程式中實作圖片上傳功能,並提供具體的程式碼範例。一、前期準備工作在開始編寫程式碼之前,我們需要先下載並安裝微信開發(fā)者工具,並註冊成為微信開發(fā)者。同時,也需要了解微信

使用微信小程式實現(xiàn)輪播圖切換效果微信小程式是一種輕量級的應(yīng)用程序,具有簡單、高效的開發(fā)和使用特點。在微信小程式中,實作輪播圖切換效果是常見的需求。本文將介紹如何使用微信小程式實現(xiàn)輪播圖切換效果,並給出具體的程式碼範例。首先,在微信小程式的頁面檔案中,新增一個輪播圖元件。例如,可以使用<swiper>標籤來實現(xiàn)輪播圖的切換效果。在該組件中,可以透過b

實現(xiàn)微信小程式中的圖片旋轉(zhuǎn)效果,需要具體程式碼範例微信小程式是一種輕量級的應(yīng)用程序,為用戶提供了豐富的功能和良好的用戶體驗。在小程式中,開發(fā)者可以利用各種元件和API來實現(xiàn)各種效果。其中,圖片旋轉(zhuǎn)效果是一種常見的動畫效果,可以為小程式增添趣味性和視覺效果。在微信小程式中實作圖片旋轉(zhuǎn)效果,需要使用小程式提供的動畫API。以下是一個具體的程式碼範例,展示如何在小程

實作微信小程式中的滑動刪除功能,需要具體程式碼範例隨著微信小程式的流行,開發(fā)者在開發(fā)過程中經(jīng)常會遇到一些常見功能的實作問題。其中,滑動刪除功能是常見、常用的功能需求。本文將為大家詳細介紹如何在微信小程式中實現(xiàn)滑動刪除功能,並給出具體的程式碼範例。一、需求分析在微信小程式中,滑動刪除功能的實作涉及以下要點:列表展示:要顯示可滑動刪除的列表,每個列表項目需要包
