vue实现购物车功能(商品分类)
作者:uuai 发布时间:2023-07-02 16:34:30
标签:vue,购物车
本文实例为大家分享了vue实现购物车功能的具体代码,供大家参考,具体内容如下
new Vue({
el: "#app",
data: {
cIndex: 0,
lists: [
{
title: "推荐商品",
goods: [
{
id: 0,
img: './images/goods.png',
name: '散称樱桃1',
price: '10.00',
num: 0
},
{
id: 1,
img: './images/goods.png',
name: '散称樱桃1',
price: '10.00',
num: 0
}
]
},
{
title: "推荐商品",
goods: [
{
id: 2,
img: './images/goods.png',
name: '散称樱桃2',
price: '20.00',
num: 0
},
{
id: 3,
img: './images/goods.png',
name: '散称樱桃2',
price: '20.00',
num: 0
},
]
},
],
carArr: [],
appearCar: false,
},
computed:{
alltotal:function () {
var alltotal = 0;
var allNum = 0;
for(var i = 0,len = this.lists.length;i<len;i++){
for(var j = 0,goodsLen = this.lists[i].goods.length;j<goodsLen;j++){
alltotal += parseInt(this.lists[i].goods[j].num)*parseFloat(this.lists[i].goods[j].price);
allNum += parseInt(this.lists[i].goods[j].num);
}
}
return [alltotal,allNum]
},
},
methods: {
leftTap: function (index) {
this.cIndex = index
},
showCar: function () {
if (this.carArr.length == 0) {
this.appearCar = false
} else {
this.appearCar = !this.appearCar
}
},
//商品数量加
addNum: function (data) {
data.num++;
var carArr = this.carArr;
var isCar = false;
if (carArr == 0) {
carArr.push(data)
}
for (var i = 0, len = carArr.length; i < len; i++) {
if (data.id == carArr[i].id) {
isCar = true
}
}
if (!isCar) {
carArr.push(data)
}
},
reduceNum: function (data) {
if (data.num <= 0) return;
var carArr = this.carArr;
data.num--;
var isCar = false;
for (var i = 0, len = carArr.length; i < len; i++) {
if (carArr[i].num <= 0) {
carArr.splice(i, 1)
}
}
},
carAddNum: function (index) {
this.carArr[index].num++
},
carReduceNum: function (index) {
this.carArr[index].num--;
if (this.carArr[index].num <= 0) {
this.carArr.splice(index, 1)
}
if (this.carArr.length == 0) {
this.appearCar = !this.appearCar
}
},
// 清空
delCar: function () {
confirm('确定清空购物车吗?');
var cur = this.cIndex;
var goods = this.lists[cur].goods
if (true) {
this.carArr = [];
this.appearCar = !this.appearCar;
for(var i = 0,len = this.lists.length;i<len;i++){
for(var j = 0,goodsLen = this.lists[i].goods.length;j<goodsLen;j++){
this.lists[i].goods[j].num=0;
}
}
}
},
Settlement:function () {
if(this.alltotal[0]<=0){
console.log('我不动')
}else{
window.location.href = 'cashierPay.html'
}
}
}
})
html页面
<div id="app" v-cloak>
<div class='box'>
<div class='boxleft'>
<div class='boxla'>
<img src='./images/sm.png'/>
<span>扫码</span>
</div>
<ul class='boxlbox'>
<template v-for="(item,index) in lists">
<li @click='leftTap(index)' :class="{boxlb_cheak:cIndex==index}" class='boxlb'>
<span class='boxlb_inner' :class="{boxlb_inner_cheak:cIndex==index}">{{item.title}}</span>
</li>
</template>
</ul>
</div>
<ul class='boxright'>
<li class='boxri' v-for="(item,index) in lists[cIndex].goods">
<img class='boxri_img' :src='item.img'/>
<div class='boxri_text'>
<div class='boxrit_left'>
<p class='boxritl_name'>{{item.name}}</p>
<p class='boxritl_price'>¥{{item.price}}</p>
</div>
<div class='boxrit_right'>
<img @click='reduceNum(item)' v-show="item.num>0" class='boxrit_right_img' src='./images/minus.png'/>
<span class='boxrit_right_num' v-show="item.num>0">{{item.num}}</span>
<img @click='addNum(item)' class='boxrit_right_img' src='./images/add.png'/>
</div>
</div>
</li>
</ul>
</div>
<footer class='footer'>
<div class='cartImgBox'>
<img class='cartImg' src='./images/car.png' @click='showCar'/>
共{{alltotal[1]}}件商品
</div>
<div class='footerb'>¥{{alltotal[0]}}</div>
<div @click='Settlement' class='footerc'>结算</div>
</footer>
<!-- 购物车 -->
<div class='shop-car-mask' v-show="appearCar">
<div class='shop-com'>
<div class='shop-title'>
<span>已选商品</span>
<span @click="delCar">清空</span>
</div>
<ul class="car-shopList">
<template v-for='(item,index) in carArr'>
<li class='car-list'>
<div class='car-img'>
<img :src='item.img'/>
</div>
<div class='car-name'>{{item.name}}</div>
<div class='car-num'>¥{{item.price}}</div>
<div class='boxrit_right2'>
<img @click='carReduceNum(index)' class='boxrit_right_img2' src='./images/minus.png'/>
<span class='boxrit_right_num2'>{{item.num}}</span>
<img @click='carAddNum(index)' class='boxrit_right_img2' src='./images/add.png'/>
</div>
</li>
</template>
</ul>
</div>
</div>
</div>
来源:https://blog.csdn.net/qq_39019768/article/details/83094875


猜你喜欢
- Python发送email的三种方式,分别为使用登录邮件服务器、使用smtp服务、调用sendmail命令来发送三种方法Python发送em
- 1、python代码实现图片分割成九宫格需要包含的库,没有下载安装的,需要自己安装哦。实现原理很简单,就是用PIL库不断画小区域,切下来存储
- Vue 能监听数组的情况Vue 监听数组和对象的变化(vue2.x)vue 实际上可以监听数组变化,比如:直接 = 赋值data () {
- 通过本文给大家介绍Python3控制路由器——使用requests重启极路由.py的相关知识,代码写了相应的注释,以后再写成可以方便调用的模
- 1、快捷键win+r输入cmd回车调出cmd界面,在命令行输入python回车,显示python命令无法识别2、登陆python官网http
- 前言本文主要给大家介绍了关于SQL Server中bit类型字段增删查改的一些事,话说BIT类型字段之前,先看“诡异”的一幕,执行Updat
- php获取域名的google收录示例function get_index($domain){ $url="http://www.g
- 项目整体布局创建并进入项目文件夹:$ mkdir flask-tutorial$ cd flask-tutorial接下来按照 安装简介 设
- python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), i
- 疑问在调用socket的时候,我们会使用到listen()函数,里面有个参数叫backlog, 例如:socket.listen(5). 那
- watch介绍vue中watch用来监听数据的响应式变化.获取数据变化前后的值watch的完整入参watch(监听的数据,副作用函数,配置对
- 做一个简单WPF连接数据库的控件类型和名称:DataGrid:dataGrid &
- 如何用Access加密页面?很简单哦,看看这个用用Access和ASP做的加密程序: <%userid =&nbs
- 什么是多态?多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charl
- 在Vue项目中编写代码的时候经常会碰到这种烦人的无故报错,其实这是ESLint代码,如图下:解决办法:File>Settings>
- 在开发应用程序时,客户端(前端页面或APP)与服务端交互是在所难免的,在交互过程传递数据时,最通用和流行格式便是JSON,Go语言提供了en
- Pycharm安装cv2 [python3.6]python解释器为Anaconda的3.6版本下载在这里选择对应的版本进行下载,其中参数分
- 具体如何屏蔽更多的快捷键可以自行google搜索。 这里要说的是如何屏蔽后去执行自定义的事件。这里为了方便使用的Kibo做例子,使用goog
- 打印在使用go写一些小程序时,我们没必要引入额外的包,直接使用fmt标准包打印即可:import "fmt"func m
- 下载:pip install apschedulerpip install django-apscheduler将 django-apsch