使用vue实现购物车功能
页面效果图:

html代码:
<div class="shop-car" id='car'>
<div class="count-custom">
全部商品 {{count}}
</div>
<table border="1" cellspacing="0" cellpadding="10">
<tr>
<th><input type="checkbox" name="" id="checkAll" value="" @click="checkAll"/>全部</th>
<th>商品</th>
<th>单价(元)</th>
<th>数量</th>
<th>操作</th>
</tr>
<tr v-for="item in goods" :key="item.id">
<td><input type="checkbox" name="" class="checked"id="" value="" @click="checked()"/></td>
<td>
<div class="info">
<div class="img-left">
<img :src="item.img" >
</div>
<div class="info-right">
<p class="name">{{item.name}}</p>
<p class="cun">{{item.cicun}}</p>
<p class="memery">{{item.memery}}</p>
</div>
</div>
</td>
<td>
{{item.price}}
</td>
<td>
<div class="steper">
<input type="button" class="opts" id="" value="-" @click="options(-1,item.id)" />
<span>{{item.num}}</span>
<input type="button" name="" @click="options(+1,item.id)" value="+" />
</div>
</td>
<td><a href="#" @click="del(item.id)">删除</a></td>
</tr>
<tr>
<td colspan="5" style="text-align: center;">统计:{{countPrice}}元</td>
</tr>
</table>
</div>
css代码:
*{
margin: 0px;
padding: 0px;
box-sizing: border-box;
}
.shop-car{
margin-left: 20px;
margin-top: 20px1;
}
table{
/* text-align: center; */
/* align-content: center; */
}
tr>td:first-child{
text-align: center;
}
.info{
display: flex;
flex-direction: row;
align-items: center;
}
.info-right{
height: 80px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.img-left>img{
width: 100px;
}
.steper{
margin: 0px 20px;
}
.steper>input[type="button"]{
width:30px;
}
.steper>span{
display: inline-block;
width: 20px;
text-align: center;
}
js代码:
var vm=new Vue({
el:"#car",
data:{
count:0,
countPrice:0,
goods:[
{id:0,name:"oppo 麦芒5 全网通 4GB+64GB版 墨黑 移动联通电信4G手机 双卡双待",cicun:"4.9英寸",memery:"4GB+64GB",price:"1339.00",img:"./images/phone01.jpg",num:1},
{id:1,name:"vivo 麦芒5 全网通 4GB+64GB版 墨黑 移动联通电信4G手机 双卡双待",cicun:"4.9英寸",memery:"4GB+64GB",price:"130.00",img:"./images/phone02.jpg",num:1},
{id:2,name:"华为 麦芒5 全网通 4GB+64GB版 墨黑 移动联通电信4G手机 双卡双待",cicun:"4.9英寸",memery:"4GB+64GB",price:"19.00",img:"./images/phone03.jpg",num:1},
]
},
methods:{
//全选
checkAll(){
var checkAll=document.getElementById("checkAll");
var checkeds=document.getElementsByClassName("checked")
if(checkAll.checked==true){
for(var i=0;i<checkeds.length;i++){
checkeds[i].checked=true
}
}
this.countPrices()
},
checked(status){
var checkAll=document.getElementById("checkAll");
var checkeds=document.getElementsByClassName("checked")
console.log(checkeds)
for (var i=0;i<checkeds.length;i++){
if(checkeds[i].checked==false){
checkAll.checked=false
return false
}
checkAll.checked=true;
}
this.countPrices()
},
options(value,id){
let goods=this.goods;
var newGoods=goods.map((item,index,arr)=>{
if(item.id==id){
item.num=item.num+value;
this.butonStatus()
}
return item;
})
this.goods=newGoods
this.countPrices()
},
// 计算价格
countPrices(){
var countPrice=0;
console.log(this.goods)
var goods=this.goods
var checkAll=document.getElementById("checkAll");
var checkeds=document.getElementsByClassName("checked")
console.log(checkeds)
for (var i=0;i<checkeds.length;i++){
if(checkeds[i].checked==true){
countPrice+=goods[i].price*goods[i].num
}
}
this.countPrice=countPrice
console.log(countPrice)
},
// 删除
del(id){
console.log(id)
var goods=this.goods;
var newGoods=goods.map((item,index,arr)=>{
if(item.id==id){
return arr.splice(index,1)
}
})
},
butonStatus(){
var opts=document.getElementsByClassName("opts")
var goods=this.goods;
var newGoods=goods.map((item,index)=>{
if(item.num<2){
console.log(index)
opts[index].disabled=true
}else{
opts[index].disabled=false
}
})
}
},
mounted(){
this.count=this.goods.length;//获取添加购物车商品的数量
this.butonStatus(); //这里判断 - 号按钮是否可用
}
})
使用vue实现购物车功能的更多相关文章
- vue实战记录(五)- vue实现购物车功能之商品总金额计算和单选全选删除功能
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(五) GitHub:sue ...
- vue实战记录(六)- vue实现购物车功能之地址列表选配
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(六) GitHub:sue ...
- vue实战记录(四)- vue实现购物车功能之过滤器的使用
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(四) GitHub:sue ...
- vue实战记录(三)- vue实现购物车功能之渲染商品列表
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(三) GitHub:sue ...
- vue实战记录(二)- vue实现购物车功能之创建vue实例
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(二) GitHub:sue ...
- vue实战记录(一)- vue实现购物车功能之前提准备
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(一) GitHub:sue ...
- 042——VUE中组件之子组件使用$on与$emit事件触发父组件实现购物车功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Vue nodejs商城项目-商品列表价格过滤和加入购物车功能
一.价格过滤功能 GoodsList.vue >>点击价格区间时发送请求 methods:{ getGoodsList(flag){ var param = { ...
- 基于vue2.0打造移动商城页面实践 vue实现商城购物车功能 基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
基于vue2.0打造移动商城页面实践 地址:https://www.jianshu.com/p/2129bc4d40e9 vue实现商城购物车功能 地址:http://www.jb51.net/art ...
随机推荐
- 如何快速地恢复你的win10
win10清单 这份List不会介绍如何安装系统,而是当面对一个新系统,如何最快的搭建,或者说恢复到一个生产力环境. 必备习惯 备份软件安装包和常用内容上云是高效恢复的两点关键. 备份软件安装包 我的 ...
- Thymeleaf入门入门入门入门入门入门入门入门入门入门入门
Thymeleaf 官网部分翻译:反正就是各种好 Thymeleaf是用来开发Web和独立环境项目的服务器端的Java模版引擎 Spring官方支持的服务的渲染模板中,并不包含jsp.而是Thymel ...
- 关于foreach总是报错invalid param等问题
原因为被foreach的数组可能为空,则会报错,只需做好容错即可,例如 if ( !empty( $arr ) ) { foreach ( $arr as $k => $v ) { } }
- Linux系统进入救援模式
由于现在很多的服务器都是用的RedHat,CentOS也比较多,这里就介绍CentOS6.6的救援模式. 有很多人的linux在用的时候不小心修改了某个权限,导致系统启动不起来,下面我就来为大家解决一 ...
- JDK14的新特性
文章目录 虽然JDK13在今年的9月17号才发布,但是丝毫不会影响到下一个版本JDK14的开发工作.听说官方定的新功能马上就要官宣了,我们这里不妨来提前推断一下. 在9月17号的发布中,Oracle提 ...
- NFS共享设置
一.安装所需要的软件环境[root@fengling ~]# yum -y install rpcbind nfs-utils二.创建共享目录mkdir /web三.启动服务[root@fenglin ...
- JAVA 之 EL表达式
一.什么是EL表达式 1.Expression Language表达式语言 2.是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据) 语法格式:${expression } 二.EL中的 ...
- from _sqlite3 import * ImportError: DLL load failed: 找不到指定的模块。
*Error creating Django application: Error on python side. Exit code: 1, err: Traceback (most recent ...
- 一维滑动窗口(SlidingWindow)
滑动窗口(Sliding Window)问题经常使用快慢指针(slow, fast pointer)[0, slow) 的区域为滑动窗口已经探索过的区域[slow, fast]的区域为滑动窗口正在探索 ...
- ACM-ICPC 2019 山东省省赛 A Calandar
这个题,呃完全的送分题,签到题,一周只有五天,一年12个月,一个月30天,公式为((year1-year2)*360%5+(month1-month2)*30%5+day1-day2+初始星期)%5, ...