溫州仙降鎮(zhèn)微信小程序之購(gòu)物車功能實(shí)現(xiàn)
閱讀 43216 · 發(fā)布日期 2020-08-24 17:26 · 溫州優(yōu)光網(wǎng)絡(luò)科技有限公司|建站|APP小程序制作|做網(wǎng)站SEO推廣優(yōu)化
【摘要】
前言以往的購(gòu)物車,基本都是通過(guò)大量的 DOM 操作來(lái)實(shí)現(xiàn)。微信小程序其實(shí)跟 vue.js 的用法非常像,接下來(lái)就看看小程序可以怎樣實(shí)現(xiàn)購(gòu)物車功能。需求先來(lái)弄清楚購(gòu)物車的需求。單選、全選和取消,而且會(huì)隨著選中的商品計(jì)算出總價(jià)單個(gè)商品購(gòu)買數(shù)量的增加和減少刪除商品。當(dāng)購(gòu)物車為空時(shí),頁(yè)面會(huì)變?yōu)榭召?gòu)物車的布局根據(jù)設(shè)計(jì)圖,我們可以... 【溫州小程序開發(fā),溫州微信公眾號(hào),平陽(yáng)做網(wǎng)站,平陽(yáng)網(wǎng)站建設(shè)公司,平陽(yáng)小程序商城制作,昆陽(yáng)萬(wàn)全做網(wǎng)站,鰲江水頭小程序,蕭江騰蛟微信公眾號(hào),山門順溪南雁海西南麂鳳臥麻步懷溪網(wǎng)絡(luò)網(wǎng)店服務(wù),政采云網(wǎng)店管理服務(wù)】...
前言以往的購(gòu)物車,基本都是通過(guò)大量的 DOM 操作來(lái)實(shí)現(xiàn)。
微信小程序其實(shí)跟 vue.js 的用法非常像,接下來(lái)就看看小程序可以怎樣實(shí)現(xiàn)購(gòu)物車功能。
需求先來(lái)弄清楚購(gòu)物車的需求。
單選、全選和取消,而且會(huì)隨著選中的商品計(jì)算出總價(jià)單個(gè)商品購(gòu)買數(shù)量的增加和減少刪除商品。
當(dāng)購(gòu)物車為空時(shí),頁(yè)面會(huì)變?yōu)榭召?gòu)物車的布局根據(jù)設(shè)計(jì)圖,我們可以先實(shí)現(xiàn)靜態(tài)頁(yè)面。
接下來(lái),再看看一個(gè)購(gòu)物車需要什么樣的數(shù)據(jù)。
首先是一個(gè)商品列表(carts),列表里的單品需要:
商品圖(image),商品名(title),單價(jià)(price),數(shù)量(num),是否選中(selected),商品id(id)然后左下角的全選,需要一個(gè)字段(selectAllStatus)表示是否全選了右下角的總價(jià)(totalPrice)最后需要知道購(gòu)物車是否為空(hasList)知道了需要這些數(shù)據(jù),在頁(yè)面初始化的時(shí)候我們先定義好這些。
代碼實(shí)現(xiàn)初始化Page({
data: {
carts:[], // 購(gòu)物車列表 hasList:false, // 列表是否有數(shù)據(jù) totalPrice:0, // 總價(jià),初始為0 selectAllStatus:true // 全選狀態(tài),默認(rèn)全選 }
, 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}
] }
);
}
, }
)購(gòu)物車列表數(shù)據(jù)我們一般是通過(guò)請(qǐng)求服務(wù)器拿到的數(shù)據(jù),所以我們放在生命周期函數(shù)里給 carts 賦值。
想到每次進(jìn)到購(gòu)物車都要獲取購(gòu)物車的最新?tīng)顟B(tài),而onLoad和onReady只在初始化的時(shí)候執(zhí)行一次,所以我需要把請(qǐng)求放在 onShow 函數(shù)里。
(這里先拿點(diǎn)假數(shù)據(jù)冒充一下吧)布局 wxml修好之前寫好的靜態(tài)頁(yè)面,綁定數(shù)據(jù)。
{
item.title}
}
{
item.price}
}
{
item.num}
}
{
totalPrice}
}
let carts = this.data.carts;
// 獲取購(gòu)物車列表 let total = 0;
for(let i = 0;
i
// 循環(huán)列表得到每個(gè)數(shù)據(jù) if(carts[i].selected) {
// 判斷選中才會(huì)計(jì)算價(jià)格 total += carts[i].num * carts[i].price;
// 所有價(jià)格加起來(lái) }
}
this.setData({
// 最后賦值到data中渲染到頁(yè)面 carts: carts, totalPrice: total.toFixed(2) }
);
}
頁(yè)面中的其他操作會(huì)導(dǎo)致總價(jià)格變化的都需要調(diào)用該方法。
選擇事件點(diǎn)擊時(shí)選中,再點(diǎn)擊又變成沒(méi)選中狀態(tài),其實(shí)就是改變 selected 字段。
通過(guò) data-index="{
{
index}
}
" 把當(dāng)前商品在列表數(shù)組中的下標(biāo)傳給事件。
selectList(e) {
const index = e.currentTarget.dataset.index;
// 獲取data- 傳進(jìn)來(lái)的index let carts = this.data.carts;
// 獲取購(gòu)物車列表 const selected = carts[index].selected;
// 獲取當(dāng)前商品的選中狀態(tài) carts[index].selected = !selected;
// 改變狀態(tài) this.setData({
carts: carts }
);
this.getTotalPrice();
// 重新獲取總價(jià)}
全選事件全選就是根據(jù)全選狀態(tài) selectAllStatus 去改變每個(gè)商品的 selectedselectAll(e) {
let selectAllStatus = this.data.selectAllStatus;
// 是否全選狀態(tài) selectAllStatus = !selectAllStatus;
let carts = this.data.carts;
for (let i = 0;
i i++) {
carts[i].selected = selectAllStatus;
// 改變所有商品狀態(tài) }
this.setData({
selectAllStatus: selectAllStatus, carts: carts }
);
this.getTotalPrice();
// 重新獲取總價(jià)}
增減數(shù)量點(diǎn)擊+號(hào),num加1,點(diǎn)擊-號(hào),如果num > 1,則減1// 增加數(shù)量addCount(e) {
const index = e.currentTarget.dataset.index;
let carts = this.data.carts;
let num = carts[index].num;
num = num + 1;
carts[index].num = num;
this.setData({
carts: carts }
);
this.getTotalPrice();
}
,// 減少數(shù)量minusCount(e) {
const index = e.currentTarget.dataset.index;
let carts = this.data.carts;
let num = carts[index].num;
if(num return false;
}
num = num - 1;
carts[index].num = num;
this.setData({
carts: carts }
);
this.getTotalPrice();
}
刪除商品點(diǎn)擊刪除按鈕則從購(gòu)物車列表中刪除當(dāng)前元素,刪除之后如果購(gòu)物車為空,改變購(gòu)物車為空標(biāo)識(shí)hasList為falsedeleteList(e) {
const index = e.currentTarget.dataset.index;
let carts = this.data.carts;
carts.splice(index,1);
// 刪除購(gòu)物車列表里這個(gè)商品 this.setData({
carts: carts }
);
if(!carts.length){
// 如果購(gòu)物車為空 this.setData({
hasList: false // 修改標(biāo)識(shí)為false,顯示購(gòu)物車為空頁(yè)面 }
);
}
else{
// 如果不為空 this.getTotalPrice();
// 重新計(jì)算總價(jià)格 }
}
總結(jié)雖然一個(gè)購(gòu)物車功能比較簡(jiǎn)單,但是里面涉及到微信小程序的知識(shí)點(diǎn)還是比較多的,適合新手練習(xí)掌握。
推薦教程:
《微信小程序》以上就是微信小程序之購(gòu)物車功能實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
微信
分享相關(guān)標(biāo)簽:
微信小程序本文轉(zhuǎn)載于:
博客園,如有侵犯,請(qǐng)聯(lián)系[email protected]刪除
上一篇:
微信開發(fā)者工具的appid如何獲取?
下一篇:
微信公眾號(hào)錯(cuò)誤代碼10003怎么解決?相關(guān)文章相關(guān)視頻快速實(shí)現(xiàn)一個(gè)微信小程序的Button組件電腦微信小程序設(shè)置全屏的方法是什么?八分鐘帶你入門微信小程序開發(fā)微信小程序調(diào)用圖片安全API微信小程序之購(gòu)物車功能實(shí)現(xiàn)微信小程序開發(fā)工具的安裝初識(shí)微信小程序(1)初識(shí)微信小程序(3)
為您推薦
- 微信公眾號(hào)里“JS接口域名”實(shí)現(xiàn)分享功能 2020-08-24
- 微信支付驗(yàn)證或簽名失敗是什么原因?附三種解決方案 2020-08-24
- android微信登陸、分享做了一段時(shí)間了發(fā)現(xiàn)的一些坑 2020-08-24
- 最新整理出的微信分享后端接口實(shí)現(xiàn)的大致流程 2020-08-24
- 微信公眾號(hào)開發(fā):商戶如何給用戶發(fā)紅包實(shí)例講解 2020-08-24
- 長(zhǎng)見(jiàn)識(shí)了,原來(lái)微信瀏覽器內(nèi)可以直接啟動(dòng)外部瀏覽器 2020-08-24
- 怎么創(chuàng)建微信公眾號(hào)自定義菜單欄?這里給出了權(quán)威解答 2020-08-24
- 微信公眾號(hào)開發(fā),實(shí)現(xiàn)倒計(jì)時(shí)的一個(gè)功能(純代碼) 2020-08-24