前言
以往的購(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ù)。
?<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)傳給事件。
<p>selectList(e) {<br/> const index = e.currentTarget.dataset.index; // 獲取data- 傳進(jìn)來(lái)的index<br/> let carts = this.data.carts; // 獲取購(gòu)物車列表<br/> const selected = carts[index].selected; // 獲取當(dāng)前商品的選中狀態(tài)<br/> carts[index].selected = !selected; // 改變狀態(tài)<br/> this.setData({<br/> carts: carts<br/> });<br/> this.getTotalPrice(); // 重新獲取總價(jià)<br/>}<br/></p>
全選事件
全選就是根據(jù)全選狀態(tài) selectAllStatus 去改變每個(gè)商品的 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(); // 重新獲取總價(jià)<br/>}<br/></p>
增減數(shù)量
點(diǎn)擊+號(hào),num加1,點(diǎn)擊-號(hào),如果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>
刪除商品
點(diǎn)擊刪除按鈕則從購(gòu)物車列表中刪除當(dāng)前元素,刪除之后如果購(gòu)物車為空,改變購(gòu)物車為空標(biāo)識(shí)hasList為false
deleteList(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í)掌握。
推薦教程:《微信小程序》
Atas ialah kandungan terperinci 微信小程序之購(gòu)物車功能實(shí)現(xiàn). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Program mini WeChat rasmi Xianyu telah dilancarkan secara senyap-senyap Dalam program mini, anda boleh menghantar mesej peribadi untuk berkomunikasi dengan pembeli/penjual, melihat maklumat dan pesanan peribadi, mencari item, dsb. Jika anda ingin tahu apakah program mini Xianyu WeChat. dipanggil, lihat sekarang. Apakah nama applet Xianyu WeChat Jawapan: Xianyu, transaksi terbiar, jualan terpakai, penilaian dan kitar semula. 1. Dalam program mini, anda boleh menghantar mesej terbiar, berkomunikasi dengan pembeli/penjual melalui mesej peribadi, melihat maklumat dan pesanan peribadi, mencari item yang ditentukan, dsb. 2. Pada halaman program mini, terdapat halaman utama, berdekatan, post idle, messages, and mine 5 functions; 3. Jika anda ingin menggunakannya, anda mesti mengaktifkan pembayaran WeChat sebelum anda boleh membelinya;

Melaksanakan kesan penapis gambar dalam program mini WeChat Dengan populariti aplikasi media sosial, orang ramai semakin gemar menggunakan kesan penapis pada foto untuk meningkatkan kesan artistik dan daya tarikan foto. Kesan penapis gambar juga boleh dicapai dalam program mini WeChat, menyediakan pengguna dengan fungsi penyuntingan foto yang lebih menarik dan kreatif. Artikel ini akan memperkenalkan cara melaksanakan kesan penapis imej dalam program mini WeChat dan memberikan contoh kod khusus. Pertama, kita perlu menggunakan komponen kanvas dalam applet WeChat untuk memuatkan dan mengedit imej. Komponen kanvas boleh digunakan pada halaman

Untuk melaksanakan kesan menu lungsur dalam Program Mini WeChat, contoh kod khusus diperlukan Dengan populariti Internet mudah alih, Program Mini WeChat telah menjadi bahagian penting dalam pembangunan Internet, dan semakin ramai orang telah mula memberi perhatian kepada dan. gunakan Program Mini WeChat. Pembangunan program mini WeChat adalah lebih mudah dan pantas daripada pembangunan APP tradisional, tetapi ia juga memerlukan penguasaan kemahiran pembangunan tertentu. Dalam pembangunan program mini WeChat, menu lungsur ialah komponen UI biasa, yang mencapai pengalaman pengguna yang lebih baik. Artikel ini akan memperkenalkan secara terperinci cara melaksanakan kesan menu lungsur dalam applet WeChat dan menyediakan praktikal

Program mini WeChat rasmi Xianyu telah dilancarkan secara senyap-senyap Ia menyediakan pengguna dengan platform yang mudah yang membolehkan anda menerbitkan dan berdagang item terbiar dengan mudah. Dalam program mini, anda boleh berkomunikasi dengan pembeli atau penjual melalui mesej peribadi, melihat maklumat peribadi dan pesanan, dan mencari item yang anda inginkan. Jadi apa sebenarnya yang dipanggil Xianyu dalam program mini WeChat ini akan memperkenalkannya kepada anda secara terperinci Pengguna yang ingin tahu, sila ikuti artikel ini dan teruskan membaca! Apakah nama applet Xianyu WeChat Jawapan: Xianyu, transaksi terbiar, jualan terpakai, penilaian dan kitar semula. 1. Dalam program mini, anda boleh menghantar mesej terbiar, berkomunikasi dengan pembeli/penjual melalui mesej peribadi, melihat maklumat dan pesanan peribadi, mencari item yang ditentukan, dsb. 2. Pada halaman program mini, terdapat halaman utama, berdekatan, post melahu, mesej, dan 5 fungsi;

Applet WeChat melaksanakan fungsi muat naik gambar Dengan perkembangan Internet mudah alih, applet WeChat telah menjadi bahagian yang amat diperlukan dalam kehidupan orang ramai. Program mini WeChat bukan sahaja menyediakan pelbagai senario aplikasi, tetapi juga menyokong fungsi yang ditentukan oleh pembangun, termasuk fungsi muat naik imej. Artikel ini akan memperkenalkan cara untuk melaksanakan fungsi muat naik imej dalam applet WeChat dan memberikan contoh kod khusus. 1. Kerja persediaan Sebelum mula menulis kod, kita perlu memuat turun dan memasang alat pembangun WeChat dan mendaftar sebagai pembangun WeChat. Pada masa yang sama, anda juga perlu memahami WeChat

Untuk melaksanakan kesan putaran imej dalam Program Mini WeChat, contoh kod khusus diperlukan Program Mini WeChat ialah aplikasi ringan yang menyediakan pengguna dengan fungsi yang kaya dan pengalaman pengguna yang baik. Dalam program mini, pembangun boleh menggunakan pelbagai komponen dan API untuk mencapai pelbagai kesan. Antaranya, kesan putaran gambar merupakan kesan animasi biasa yang boleh menambah minat dan kesan visual pada program mini. Untuk mencapai kesan putaran imej dalam program mini WeChat, anda perlu menggunakan API animasi yang disediakan oleh program mini. Berikut ialah contoh kod khusus yang menunjukkan cara untuk

Gunakan applet WeChat untuk mencapai kesan penukaran karusel WeChat applet ialah aplikasi ringan dengan ciri pembangunan dan penggunaan yang mudah dan cekap. Dalam program mini WeChat, adalah keperluan biasa untuk mencapai kesan penukaran karusel. Artikel ini akan memperkenalkan cara menggunakan applet WeChat untuk mencapai kesan penukaran karusel dan memberikan contoh kod khusus. Mula-mula, tambahkan komponen karusel pada fail halaman applet WeChat. Contohnya, anda boleh menggunakan teg <swiper> untuk mencapai kesan penukaran karusel. Dalam komponen ini, anda boleh lulus b

Melaksanakan fungsi padam gelongsor dalam program mini WeChat memerlukan contoh kod khusus Dengan populariti program mini WeChat, pembangun sering menghadapi masalah pelaksanaan beberapa fungsi biasa semasa proses pembangunan. Antaranya, fungsi padam gelongsor adalah keperluan fungsi yang biasa dan biasa digunakan. Artikel ini akan memperkenalkan secara terperinci cara melaksanakan fungsi padam gelongsor dalam applet WeChat dan memberikan contoh kod khusus. 1. Analisis keperluan Dalam program mini WeChat, pelaksanaan fungsi pemadaman gelongsor melibatkan perkara berikut: Paparan senarai: Untuk memaparkan senarai yang boleh diluncurkan dan dipadam, setiap item senarai perlu disertakan
