<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div id="app">
<div class="container">
<!--每一行又会拥有12列-->
<div class="row">
<table class="table table-hover table-bordered">
<caption style="font-size:40px;text-align:center;" class="text-success">购物车</caption>
<tr>
<!--click点击时 checkbox状态还没有改变,所以拿到的是相反-->
<!--不用click而用change change保证只当值变化的时候执行函数-->
<th>全选<input type="checkbox" v-model="check" v-on:change="checkAll()"></th>
<td>商品名称</td>
<td>单价</td>
<td>数量</td>
<td>小计</td>
<td>操作</td>
</tr>
<tr v-for="(product,index) in products">
<td><input type="checkbox" v-model="product.isselected" @change="change">
<!--v-bind:src也可以缩写为:src 动态绑定指令-->
</td>
<td><img style="margin-left:30px" width="100px" height="100px" :src="product.producteImg" :title="product.productName" >{{product.productName}}</td>
<!--属性中用冒号取,属性外用{{}}取-->
<td>{{product.productPrice | toFixed(2)}}</td>
<!--.number是让输入框的值编程数字类型,lazy当输入框失去焦点的时候更新-->
<td><input type="number" v-model="product.productCount" style="width:50px;"></td>
<!--过滤器 原数据不变的情况下 只是改变显示的效果 管道符|-->
<td>{{product.productCount*product.productPrice | toFixed(2)}}</td>
<td><button class="btn btn-danger" style="text-size:20px;" v-on:click="del(index)">删除</button></td>
</tr>
<tr>
<!--数据一变化就会重新调用这个函数算出新的结果,不会缓存上一步结果-->
<td colspan="6" style="text-align:right;font-size:20px">总价:{{sumall() | toFixed(2)}}</td>
</tr>
</table>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="pro.json"></script>
<script>
let vm=new Vue(
{
el:"#app",
filters:{//可以有好多自定义过滤器
toFixed(input,parma){//这里的this是window
return '¥'+input.toFixed(parma);
}
},
created(){
//在数据被初始化后调用
//在这个例子中就是products,this指向VM实例
//钩子函数
//也可以拿到method中的方法
//专门用来发送ajax的方法
axios.get("./pro.json").then(
data=>{this.products=data.data;console.log(data.data)},
//这里不能回调函数中this,回调函数的this指向window
//但是箭头函数的this指向的是实例
//在chrome浏览器属性 目标那里最后加上 --allow-file-access-from-files 否则不能本地ajax
err=>{alert("失败了")})
//基于promise的
},
methods:{
del(ind){
this.products=this.products.filter((item,index)=>ind!=index)
},
checkAll(){
this.products.forEach((item)=>{item.isselected=this.check;})
},
change(){
this.check=this.products.every(item=>item.isselected)
},
sumall(){
selectproducts=this.products.filter(item=>item.isselected)
return selectproducts.reduce((prev,next)=>{ return prev+next.productCount*next.productPrice;},0)
}
},
data:{
products:[],
check:false,
sum:0
}
}
)
</script>
</body>
</html>
购物车不用computer版
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 023|决策时间:用户思考了很久,又把商品放回去了,怎么办? 什么是“决策时间”?消费者的注意力时长越来越短,人们...
- 前言 为了巩固MVC的开发模式,下面就写一个购物车的小案例.. ①构建开发环境 导入需要用到的开发包 建立程序开发...
- 上次写完购物车精简版被编辑推荐到了首页,得到许多朋友关注,评论区小伙伴建议做一个完整版.于是利用闲暇时间新增了一些...