찾다
위챗 애플릿위챗 개발WeChat 미니 프로그램에 장바구니 기능 구현

WeChat 미니 프로그램에 장바구니 기능 구현

Jul 03, 2020 am 11:15 AM
위챗 애플릿

머리말

과거에는 장바구니가 기본적으로 수많은 DOM 연산을 통해 구현되었습니다. WeChat 애플릿은 실제로 vue.js의 사용법과 매우 유사합니다. 다음으로 애플릿이 장바구니 기능을 구현하는 방법을 살펴보겠습니다.

Requirements

먼저 장바구니의 요구 사항을 파악해 보겠습니다.

  • 단일선택, 전체선택 및 취소, 선택한 상품에 따라 총금액이 계산됩니다

  • 단일 상품의 구매수량이 증감합니다

  • 상품을 삭제합니다. 장바구니가 비어 있으면 페이지는 빈 장바구니의 레이아웃으로 변경됩니다

디자인 도면에 따라 먼저 정적 페이지를 구현할 수 있습니다. 다음으로 장바구니에 어떤 종류의 데이터가 필요한지 살펴보겠습니다.

  • 첫 번째는 제품 목록(카트)입니다. 목록에 필요한 항목은 제품 이미지(이미지), 제품 이름(제목), 단가(가격), 수량(숫자), 선택 여부입니다. , 제품 ID(id)

  • 그런 다음 왼쪽 하단에서 모두 선택하면 모두 선택되었는지 여부를 나타내는 필드(selectAllStatus)가 필요합니다

  • 오른쪽 하단에 총 가격(totalPrice)

  • 마지막으로 장바구니가 비어 있는지 확인해야 합니다(hasList)

이제 이러한 데이터가 필요하므로 페이지가 초기화될 때 이를 먼저 정의합니다.

코드 구현

초기화

Page({
    data: {
        carts:[],               // 购物车列表
        hasList:false,          // 列表是否有数据
        totalPrice:0,           // 总价,初始为0
        selectAllStatus:true    // 全选状态,默认全选
    },
    onShow() {
        this.setData({
          hasList: true,        // 既然有数据了,那设为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}
          ]
        });
      },
})

장바구니 목록 데이터 우리는 주로 서버에 요청하여 데이터를 얻기 때문에 라이프사이클 기능에서 장바구니에 값을 할당합니다. 장바구니에 들어갈 때마다 장바구니의 최신 상태를 받아볼까 생각했는데 onLoad와 onReady는 초기화 시 한 번만 실행되므로 onShow 함수에 요청을 넣어야 합니다. (여기서 가짜 데이터인 척 해보자)

Layout wxml

이전에 작성한 정적 페이지를 복구하고 데이터를 바인딩합니다.

 <view>
    <!-- wx:for 渲染购物车列表 -->
    <view>
    
        <!-- wx:if 是否选择显示不同图标 -->
        <icon></icon>
        <icon></icon>
        
        <!-- 点击商品图片可跳转到商品详情 -->
        <navigator>
            <image></image>
        </navigator>
        
        <text>{{item.title}}</text>
        <text>¥{{item.price}}</text>
        
        <!-- 增加减少数量按钮 -->
        <view>
            <text>-</text>
            <text>{{item.num}}</text>
            <text>+</text>
        </view>
        
        <!-- 删除按钮 -->
        <text> × </text>
    </view>
</view>

<!-- 底部操作栏 -->
<view>
    <!-- wx:if 是否全选显示不同图标 -->
    <icon></icon>
    <icon></icon>
    <text>全选</text>
    
    <!-- 总价 -->
    <text>¥{{totalPrice}}</text>
</view>

총 가격 계산

총 가격 = 선택한 제품의 가격 1 * 수량 + 선택한 제품의 가격 2 * 수량 +...
공식에 따르면

getTotalPrice() {
    let carts = this.data.carts;                  // 获取购物车列表
    let total = 0;
    for(let i = 0; i<carts.length><p>페이지의 다른 작업이 수행됩니다. 모든 변경사항은 이 메소드를 호출해야 합니다. </p>
<p>이벤트 선택</p>
<p>클릭하면 선택되고, 다시 클릭하면 선택 해제됩니다. 실제로는 선택한 필드가 변경됩니다. 목록 배열에 있는 현재 제품의 인덱스를 이벤트에 전달하려면 data-index="{{index}}"를 전달합니다. </p>
<pre class="brush:php;toolbar:false"><p>selectList(e) {<br>    const index = e.currentTarget.dataset.index;    // 获取data- 传进来的index<br>    let carts = this.data.carts;                    // 获取购物车列表<br>    const selected = carts[index].selected;         // 获取当前商品的选中状态<br>    carts[index].selected = !selected;              // 改变状态<br>    this.setData({<br>        carts: carts<br>    });<br>    this.getTotalPrice();                           // 重新获取总价<br>}<br></p>

모든 이벤트 선택

모두 선택은 전체 선택 상태에 따라 각 상품의 선택을 변경하는 것입니다. selectAllStatus

<p>selectAll(e) {<br>    let selectAllStatus = this.data.selectAllStatus;    // 是否全选状态<br>    selectAllStatus = !selectAllStatus;<br>    let carts = this.data.carts;<br><br>    for (let i = 0; i         carts[i].selected = selectAllStatus;            // 改变所有商品状态<br>    }<br>    this.setData({<br>        selectAllStatus: selectAllStatus,<br>        carts: carts<br>    });<br>    this.getTotalPrice();                               // 重新获取总价<br>}<br></p>

수량을 늘리거나 줄입니다

+를 클릭하면 숫자가 1씩 증가하고, -를 클릭하면 됩니다. , num > 1이면 마이너스 1

<p>// 增加数量<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>// 减少数量<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       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();           // 重新计算总价格
    }   
}

요약

장바구니 기능이지만 비교적 간단하지만 WeChat 애플릿에는 여전히 많은 지식 포인트가 있어 초보자가 연습하고 익히기에 적합합니다.

추천 튜토리얼: "WeChat 미니 프로그램"

위 내용은 WeChat 미니 프로그램에 장바구니 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 博客园에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.