成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

微信小程序之購(gòu)物車(chē)功能

Benedict Evans / 2805人閱讀

摘要:微信小程序其實(shí)跟的用法非常像,接下來(lái)就看看小程序可以怎樣實(shí)現(xiàn)購(gòu)物車(chē)功能。完整的小程序商城含購(gòu)物車(chē),請(qǐng)戳更多文章微信贊賞

前言

以往的購(gòu)物車(chē),基本都是通過(guò)大量的 DOM 操作來(lái)實(shí)現(xiàn)。微信小程序其實(shí)跟 vue.js 的用法非常像,接下來(lái)就看看小程序可以怎樣實(shí)現(xiàn)購(gòu)物車(chē)功能。

需求

先來(lái)弄清楚購(gòu)物車(chē)的需求。

單選、全選和取消,而且會(huì)隨著選中的商品計(jì)算出總價(jià)

單個(gè)商品購(gòu)買(mǎi)數(shù)量的增加和減少

刪除商品。當(dāng)購(gòu)物車(chē)為空時(shí),頁(yè)面會(huì)變?yōu)榭召?gòu)物車(chē)的布局

根據(jù)設(shè)計(jì)圖,我們可以先實(shí)現(xiàn)靜態(tài)頁(yè)面。接下來(lái),再看看一個(gè)購(gòu)物車(chē)需要什么樣的數(shù)據(jù)。

首先是一個(gè)商品列表(carts),列表里的單品需要:商品圖(image),商品名(title),單價(jià)(price),數(shù)量(num),是否選中(selected),商品id(id)

然后左下角的全選,需要一個(gè)字段(selectAllStatus)表示是否全選了

右下角的總價(jià)(totalPrice)

最后需要知道購(gòu)物車(chē)是否為空(hasList)

知道了需要這些數(shù)據(jù),在頁(yè)面初始化的時(shí)候我們先定義好這些。

代碼實(shí)現(xiàn) 初始化
Page({
    data: {
        carts:[],               // 購(gòu)物車(chē)列表
        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)物車(chē)列表數(shù)據(jù)我們一般是通過(guò)請(qǐng)求服務(wù)器拿到的數(shù)據(jù),所以我們放在生命周期函數(shù)里給 carts 賦值。想到每次進(jìn)到購(gòu)物車(chē)都要獲取購(gòu)物車(chē)的最新?tīng)顟B(tài),而onLoad和onReady只在初始化的時(shí)候執(zhí)行一次,所以我需要把請(qǐng)求放在 onShow 函數(shù)里。(這里先拿點(diǎn)假數(shù)據(jù)冒充一下吧)

布局 wxml

修好之前寫(xiě)好的靜態(tài)頁(yè)面,綁定數(shù)據(jù)。

 
    
    
    
        
        
        
        
        
        
            
        
        
        {{item.title}}
        ¥{{item.price}}
        
        
        
            -
            {{item.num}}
            +
        
        
        
         × 
    




    
    
    
    全選
    
    
    ¥{{totalPrice}}
計(jì)算總價(jià)

總價(jià) = 選中的商品1的 價(jià)格 數(shù)量 + 選中的商品2的 價(jià)格 數(shù)量 + ...
根據(jù)公式,可以得到

getTotalPrice() {
    let carts = this.data.carts;                  // 獲取購(gòu)物車(chē)列表
    let total = 0;
    for(let i = 0; i

頁(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)物車(chē)列表
    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è)商品的 selected

selectAll(e) {
    let selectAllStatus = this.data.selectAllStatus;    // 是否全選狀態(tài)
    selectAllStatus = !selectAllStatus;
    let carts = this.data.carts;

    for (let i = 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) {
    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 <= 1){
      return false;
    }
    num = num - 1;
    carts[index].num = num;
    this.setData({
      carts: carts
    });
    this.getTotalPrice();
}
刪除商品

點(diǎn)擊刪除按鈕則從購(gòu)物車(chē)列表中刪除當(dāng)前元素,刪除之后如果購(gòu)物車(chē)為空,改變購(gòu)物車(chē)為空標(biāo)識(shí)hasList為false

deleteList(e) {
    const index = e.currentTarget.dataset.index;
    let carts = this.data.carts;
    carts.splice(index,1);              // 刪除購(gòu)物車(chē)列表里這個(gè)商品
    this.setData({
        carts: carts
    });
    if(!carts.length){                  // 如果購(gòu)物車(chē)為空
        this.setData({
            hasList: false              // 修改標(biāo)識(shí)為false,顯示購(gòu)物車(chē)為空頁(yè)面
        });
    }else{                              // 如果不為空
        this.getTotalPrice();           // 重新計(jì)算總價(jià)格
    }   
}
總結(jié)

雖然一個(gè)購(gòu)物車(chē)功能比較簡(jiǎn)單,但是里面涉及到微信小程序的知識(shí)點(diǎn)還是比較多的,適合新手練習(xí)掌握。

完整的小程序商城demo含購(gòu)物車(chē),請(qǐng)戳:wxapp-mall

更多文章:lin-xin/blog 微信贊賞

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/86983.html

相關(guān)文章

  • 信小程序——商城篇

    摘要:微信小程序之跳轉(zhuǎn)在進(jìn)入商品詳情頁(yè)以后,點(diǎn)擊左下角的圖標(biāo)原應(yīng)該跳轉(zhuǎn)到首頁(yè),但是一直點(diǎn)也不跳,而且也不報(bào)錯(cuò)。放下效果圖微信小程序購(gòu)物車(chē)購(gòu)物車(chē)頁(yè)面邏輯的話,要按業(yè)務(wù)需求來(lái)。 前言 隨著wepy和mpvue的出現(xiàn)及流行,開(kāi)發(fā)小程序變的越來(lái)越便捷和強(qiáng)大,作為基佬社區(qū)的一份子,我們都需要把自己遇到的問(wèn)題以及如何解決的方式相互分享,這樣才能幫助到更多的朋(ji)友(lao)。如有寫(xiě)的不足的地方,請(qǐng)各...

    k00baa 評(píng)論0 收藏0
  • 信小程序--(與唯品會(huì)來(lái)場(chǎng)粉紅色的邂逅 ???)

    摘要:微信小程序之與唯品會(huì)來(lái)場(chǎng)粉紅色的邂逅買(mǎi)買(mǎi)買(mǎi),雖然雙十二剛過(guò),可是唯品會(huì)的折扣卻是依然火爆。一打開(kāi)頁(yè)面,便是粉色的主頁(yè)映入眼簾,琳瑯滿(mǎn)目的商品,讓我這個(gè)月光族過(guò)了把眼癮。 Welcome to miaomiaoXiongs segmentfault 微信小程序之--(與唯品會(huì)來(lái)場(chǎng)粉紅色的邂逅 ???) 買(mǎi)買(mǎi)買(mǎi),雖然雙十二剛過(guò),可是唯品會(huì)的折扣卻是依然火爆。一打開(kāi)頁(yè)面,便是粉色的主頁(yè)映入...

    SnaiLiu 評(píng)論0 收藏0
  • 信小程序--(與唯品會(huì)來(lái)場(chǎng)粉紅色的邂逅 ???)

    摘要:微信小程序之與唯品會(huì)來(lái)場(chǎng)粉紅色的邂逅買(mǎi)買(mǎi)買(mǎi),雖然雙十二剛過(guò),可是唯品會(huì)的折扣卻是依然火爆。一打開(kāi)頁(yè)面,便是粉色的主頁(yè)映入眼簾,琳瑯滿(mǎn)目的商品,讓我這個(gè)月光族過(guò)了把眼癮。 Welcome to miaomiaoXiongs segmentfault 微信小程序之--(與唯品會(huì)來(lái)場(chǎng)粉紅色的邂逅 ???) 買(mǎi)買(mǎi)買(mǎi),雖然雙十二剛過(guò),可是唯品會(huì)的折扣卻是依然火爆。一打開(kāi)頁(yè)面,便是粉色的主頁(yè)映入...

    tianlai 評(píng)論0 收藏0
  • 信小程序--(與唯品會(huì)來(lái)場(chǎng)粉紅色的邂逅 ???)

    摘要:微信小程序之與唯品會(huì)來(lái)場(chǎng)粉紅色的邂逅買(mǎi)買(mǎi)買(mǎi),雖然雙十二剛過(guò),可是唯品會(huì)的折扣卻是依然火爆。一打開(kāi)頁(yè)面,便是粉色的主頁(yè)映入眼簾,琳瑯滿(mǎn)目的商品,讓我這個(gè)月光族過(guò)了把眼癮。 Welcome to miaomiaoXiongs segmentfault 微信小程序之--(與唯品會(huì)來(lái)場(chǎng)粉紅色的邂逅 ???) 買(mǎi)買(mǎi)買(mǎi),雖然雙十二剛過(guò),可是唯品會(huì)的折扣卻是依然火爆。一打開(kāi)頁(yè)面,便是粉色的主頁(yè)映入...

    roadtogeek 評(píng)論0 收藏0
  • 一個(gè)信小程序

    摘要:前言微信小程序在當(dāng)前比較火熱,秉著學(xué)習(xí)的目的和態(tài)度,仿都可手機(jī)點(diǎn)餐寫(xiě)了一個(gè)微信小程序,實(shí)現(xiàn)了大致功能。那么,我給大家介紹下這個(gè)微信小程序。 前言 微信小程序在當(dāng)前比較火熱,秉著學(xué)習(xí)的目的和態(tài)度,仿CoCo都可手機(jī)點(diǎn)餐寫(xiě)了一個(gè)微信小程序,實(shí)現(xiàn)了大致功能。那么,我給大家介紹下這個(gè)微信小程序。 使用到的工具: 1.Visual Studio Code 編譯器 2.微信web開(kāi)發(fā)者工具 3....

    klinson 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<