能够对商品进行数量的修改以及删除操作:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./js/vue.js"></script>
<style>
* {
margin: 0;
padding: 0;
list-style: none;
}
.box {
width: 800px;
display: flex;
flex-direction: column;
border: 1px solid #000;
}
.box>.title>div {
width: 800px;
display: flex;
text-align: center;
}
.box>.title>div li {
flex: 1;
border: 1px solid #000;
}
.content {
width: 800px;
}
.content .item {
display: flex;
}
.content .item li {
flex: 1;
border: 1px solid #000;
}
.item {
text-align: center;
}
</style>
</head>
<body>
<div class="box">
<mytitle></mytitle>
<mycontent :goods="goods" @mydel="remove"></mycontent>
<mytotal :goods="goods"></mytotal>
</div>
</body>
</html>
<script>
//全局
Vue.filter("format", function (val, str) {
var date = new Date(val);
return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`
})
//头部
Vue.component("mytitle", {
template: `
<div class="title">
<h1>购物车列表</h1>
<div>
<li>编号</li>
<li>商品名称</li>
<li>商品价格</li>
<li>数量</li>
<li>金额</li>
<li style="width:80px">时间</li>
<li>操作</li>
</div>
</div>
`
})
//内容
Vue.component("mycontent", {
props: ["goods"], //如同 data
template: `
<div class="content">
<div class="item" v-for="(item,index) in goods" :key="item.id">
<li>{{item.id}}</li>
<li>{{item.name}}</li>
<li>{{item.price}}</li>
<li>
<button @click="sub(index)">-</button>
<input style="width:25px" v-model="item.num">
<button @click="sup(index)">+</button>
</li>
<li>{{item.price*item.num}}</li>
<li style="width:80px">
{{item.time|format}}
</li>
<li>
<a @click="del(index)">删除</a>
</li>
</div>
</div>
`,
methods: {
sub(index) {
if (this.goods[index].num <= 1) {
return;
}
this.goods[index].num--;
},
sup(index) {
this.goods[index].num++;
},
del(index) {
// if (!confirm("确定要删除吗?")) {
// return;
// }
// this.goods.splice(index, 1);
this.$emit("mydel",index);
}
},
})
//底部
Vue.component("mytotal", {
props: ["goods"],
template: `
<div class="total">
总金额:{{total}}
</div>
`,
computed: {
total() {
var money = 0;
for (var i = 0; i < this.goods.length; i++) {
money += this.goods[i].num * this.goods[i].price;
}
return money
}
},
})
new Vue({
el: ".box",
data: {
goods: [
{ id: 1, name: "衣服", price: 68, num: 1, time: Date.now() },
{ id: 2, name: "鞋子", price: 208, num: 2, time: Date.now() },
{ id: 3, name: "帽子", price: 9.9, num: 1, time: Date.now() },
{ id: 4, name: "项链", price: 938, num: 1, time: Date.now() }
]
},
methods:{
remove(index){
if(!confirm("确定要删除吗")){
return
}
this.goods.splice(index,1);
}
}
})
</script>
运行结果: