Vue如何利用Postman和Axios制作小米商城购物车

发布于:2025-04-12 ⋅ 阅读:(30) ⋅ 点赞:(0)

小编最近太忙了,没来得及更新博客!上一条博客我们写了小米商城购物车的简版,今天我们就在简版的基础之上来增加一些功能,写一下数量的加减、总价、删除(批量删除)、全选取消全选等功能。如果上一条博客没有看到的可以点进小编的主页查看喔!

一、购物车数量的加减

要实现加减的功能,首页看到加减我们就知道要把这个方法写在methods方法属性里面,这里的话加我们用add,减我们用sub。要想实现点一下鼠标加一个数量或者点击鼠标减一个数量,我们要利用for循环来做。

(一)加:

add(id) {

                    for (let i = 0; i < this.fruitList.length; i++) {

                        if (this.fruitList[i].id === id) {

                            this.fruitList[i].num++;

                        }

                    }

                }

代码解释:遍历this.fruitList 数组,检查当前水果的id是否等于传入的id如果找到匹配的水果,将其数量加上1。

(二)减:

sub(id) {

                    for (let i = 0; i < this.fruitList.length; i++) {

                        if (this.fruitList[i].id === id) {

                            if (this.fruitList[i].num > 1) {

                                this.fruitList[i].num--;

                            }

                        }

                    }

                }

代码解释:遍历this.fruitList 数组,检查当前水果的id是否等于传入的id,如果找到匹配的水果,并且其数量大于1,才能够减少数量,接着进行数量的减减操作,在进行减的操作的时候,有必要的话,我们可以进行判断,避免选择的数量为负数。

二、删除

看到上述加减的方法之后,我们也应该知道删除也应该是写在methods里面的对吧,那么删除的话我们就不需要利用for循环遍历了。

del(id) {

                    this.fruitList = this.fruitList.filter(item => item.id !== id);

                }

代码解释:通过filter方法创建一个新的数组,保留所有id不等于传入id的水果,将过滤后的新数组重新赋值给this.fruitList,从而删除指定的水果。

三、批量删除

delSelected() {

                    this.fruitList = this.fruitList.filter(item => !item.isChecked);

                }

代码解释:把批量删除的代码写在methods方法里面,首先遍历this.fruitList数组,保留isChecked属性为false的水果(也就是未被我们选中的东西),紧接着将过滤后的新数组重新赋值给this.fruitList,从而删除所有被选中的水果。

四:全选(不全选)

if (this.fruitList.length === 0) {

                        this.isAll = false;

                    }

代码解释:检查删除后this.fruitList是否为空数组,如果this.fruitList为空,则将isAll属性设置为false

五、总价计算

总价=单个数量*单个数量价格,这里的话物品不同我们还要把每一种物品的总价进行相加,才得到最终的总价,这里话总价计算我们要写在计算机属性computed里面。

computed: {

                totalPrice() {

                    let sum = 0;

                    for (let item of this.fruitList) {

                        if (item.isChecked) {

                            sum += item.num * item.price;

                        }

                    }

                    return sum;

                },

                totalCount() {

                    let count = 0;

                    for (let item of this.fruitList) {

                        if (item.isChecked) {

                            count += item.num;

                        }

                    }

                    return count;

                }

            }

代码解释:初始化一个变量sum,用于累加总价格,初始值为0,使用for of 循环遍历this.fruitList数组,其中item是数组中的每个水果对象,检查当前水果的isChecked属性是否为true,即是否被选中,如果水果被选中,将其数量乘以单价得到该水果的总价,返回累加后的总价格。

HTML核心代码如下:

 <div class="app-container" id="app">

            <div class="breadcrumb">

                <img class="logo" src="img/7.png" alt="">

                <span class="span1">我的购物车</span>

                <span class="span2">温馨提示:产品是否购买成功,以最终下单为准哦,请尽快结算</span>

                <span class="span3"> 2909696753 | 我的订单</span>

            </div>

            <!-- 购物车主体 -->

            <div v-if="fruitList.length > 0" class="main">

                <div class="table">

                    <!-- 头部 -->

                    <div class="thead">

                        <div class="tr">

                            <div class="th">

                                <!-- 全选 -->

                                <label class="check-all">

                                    <input type="checkbox" v-model="isAll">

                                    全选

                                </label>

                            </div>

                            <div class="th th-pic">商品名称</div>

                            <div class="th">单价</div>

                            <div class="th num-th">数量</div>

                            <div class="th">小计</div>

                            <div class="th">操作</div>

                        </div>

                    </div>

                    <!-- 身体 -->

                    <div class="tbody">

                        <div v-for="(item,index) in fruitList" :key="item.id" :class="{tr:true,active: item.isChecked}">

                            <div class="td"><input type="checkbox" class="mycheck" v-model="item.isChecked" /></div>

                            <div class="td goods"><img v-bind:src="item.icon" alt="" />{{item.name}}</div>

                            <div class="td">{{item.price}}</div>

                            <div class="td">

                                <div class="my-input-number">

                                    <!--当num小于等于1时禁用-号-->

                                    <button :disabled="item.num <= 1" @click="sub(item.id)" class="decrease"> -

                                    </button>

                                    <span class="my-input__inner">{{item.num}}</span>

                                    <button @click="add(item.id)" class="increase"> + </button>

                                </div>

                            </div>

                            <div class="td">{{ item.num * item.price }}</div>

                            <div class="td"><button class="delbutton" v-on:click="del(item.id)">×</button></div>

                        </div>

                    </div>

                </div>

                <!-- 底部 -->

                <div class="bottom">

                    <div class="leftbox">

                        <span>继续购物已选择:<span class="textcol">{{totalCount}}</span>件</span>

                    </div>

                    <div class="right-box">

                        <span class="price-box">

                            合计&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;

                            <span class="price">{{totalPrice}}</span>元

                        </span>

                        <!-- 删除按钮 -->

                        <button class="delete" @click="delSelected">删除选中</button>

                        <button class="pay">去结算</button>

                    </div>

                </div>

            </div>

        </div>

实现效果视频如下: 动态-哔哩哔哩

如果有需要小编代码的可以私信小编!欢迎和大家一起交流学习!


网站公告

今日签到

点亮在社区的每一天
去签到