【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信小程序之購(gòu)物車功能怎么弄_第1頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信小程序之購(gòu)物車功能怎么弄_第2頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信小程序之購(gòu)物車功能怎么弄_第3頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信小程序之購(gòu)物車功能怎么弄_第4頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信小程序之購(gòu)物車功能怎么弄_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信小程序之購(gòu)物車功能怎么弄

這篇文章給大家分享的是有關(guān)微信小程序之購(gòu)物車功能怎么弄的內(nèi)容。在下覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨在下過(guò)來(lái)看看吧。前言以往的購(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修好之前寫(xiě)好的靜態(tài)頁(yè)面,綁定數(shù)據(jù)。

<view

class="cart-box">

<!--

wx:for

渲染購(gòu)物車列表

-->

<view

wx:for="{{carts}}">

<!--

wx:if

是否選擇顯示不同圖標(biāo)

-->

<icon

wx:if="{{item.selected}}"

type="success"

color="red"

bindtap="selectList"

data-index="{{index}}"

/>

<icon

wx:else

type="circle"

bindtap="selectList"

data-index="{{index}}"/>

<!--

點(diǎn)擊商品圖片可跳轉(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

是否全選顯示不同圖標(biāo)

-->

<icon

wx:if="{{selectAllStatus}}"

type="success_circle"

color="#fff"

bindtap="selectAll"/>

<icon

wx:else

type="circle"

color="#fff"

bindtap="selectAll"/>

<text>全選</text>

<!--

總價(jià)

-->

<text>¥{{totalPrice}}</text>

</view>計(jì)算總價(jià)總價(jià)=選中的商品1的價(jià)格*數(shù)量+選中的商品2的價(jià)格*數(shù)量+...根據(jù)公式,可以得到getTotalPrice()

{

let

carts

=

this.data.carts;

//

獲取購(gòu)物車列表

let

total

=

0;

for(let

i

=

0;

i<carts.length;

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){

constindex=e.currentTarget.dataset.index;

//獲取data-傳進(jìn)來(lái)的index

letcarts=this.data.carts;

//獲取購(gòu)物車列表

constselected=carts[index].selected;

//獲取當(dāng)前商品的選中狀態(tài)

carts[index].selected=!selected;

//改變狀態(tài)

this.setData({

carts:carts

});

this.getTotalPrice();

//重新獲取總價(jià)}selectList(e){

constindex=e.currentTarget.dataset.index;

//獲取data-傳進(jìn)來(lái)的index

letcarts=this.data.carts;

//獲取購(gòu)物車列表

constselected=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){

letselectAllStatus=this.data.selectAllStatus;

//是否全選狀態(tài)

selectAllStatus=!selectAllStatus;

letcarts=this.data.carts;

for(leti=0;i<carts.length;i++){

carts[i].selected=selectAllStatus;

//改變所有商品狀態(tài)

}

this.setData({

selectAllStatus:selectAllStatus,

carts:carts

});

this.getTotalPrice();

//重新獲取總價(jià)}selectAll(e){

letselectAllStatus=this.data.selectAllStatus;

//是否全選狀態(tài)

selectAllStatus=!selectAllStatus;

letcarts=this.data.carts;

for(leti=0;i<carts.length;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){

constindex=e.currentTarget.dataset.index;

letcarts=this.data.carts;

letnum=carts[index].num;

num=num+1;

carts[index].num=num;

this.setData({

carts:carts

});

this.getTotalPrice();},//減少數(shù)量minusCount(e){

constindex=e.currentTarget.dataset.index;

letcarts=this.data.carts;

letnum=carts[index].num;

if(num<=1){

returnfalse;

}

num=num-1;

carts[index].num=num;

this.setData({

carts:carts

});

this.getTotalPrice();}//增加數(shù)量addCount(e){

constindex=e.currentTarget.dataset.index;

letcarts=this.data.carts;

letnum=carts[index].num;

num=num+1;

carts[index].num=num;

this.setData({

carts:carts

});

this.getTotalPrice();},//減少數(shù)量minusCount(e){

constindex=e.currentTarget.dataset.index;

letcarts=this.data.carts;

letnum=carts[index].num;

if(num<=1){

returnfalse;

}

num=num-1;

carts[index].num=num;

this.setData({

carts:carts

});

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論