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

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

一、购物车数量的加减

要实现加减的功能,首页看到加减我们就知道要把这个方法写在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>

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

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

相关推荐
倒霉男孩1 小时前
HTML视频和音频
前端·html·音视频
喜欢便码1 小时前
JS小练习0.1——弹出姓名
java·前端·javascript
chase。1 小时前
【学习笔记】MeshCat: 基于three.js的远程可控3D可视化工具
javascript·笔记·学习
暗暗那1 小时前
【面试】什么是回流和重绘
前端·css·html
小宁爱Python2 小时前
用HTML和CSS绘制佩奇:我不是佩奇
前端·css·html
weifexie2 小时前
ruby可变参数
开发语言·前端·ruby
千野竹之卫2 小时前
3D珠宝渲染用什么软件比较好?渲染100邀请码1a12
开发语言·前端·javascript·3d·3dsmax
sunbyte2 小时前
初识 Three.js:开启你的 Web 3D 世界 ✨
前端·javascript·3d
半兽先生2 小时前
WebRtc 视频流卡顿黑屏解决方案
java·前端·webrtc
南星沐4 小时前
Spring Boot 常用依赖介绍
java·前端·spring boot