vue简单实现购物车列表功能
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>购物车</title>
<!--<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>-->
<link rel="stylesheet" href="style.css" type="text/css">
<script src="https://unpkg.com/vue/dist/vue.min.js"></script>
</head>
<body>
<div id="app" v-clock>
<template v-if="list.length">
<!--代码分为两个部分,一部分是商品信息,另外一部分就是带有千位分隔符的商品总价(每隔三位数加进一个逗号)-->
<table>
<thead>
<tr>
<th></th>
<th>商品名称</th>
<th>商品单价</th>
<th>购买数量</th>
<th>操作</th>
<th>是否选中</th>iutheiorhgewu9ekhryeol;oru
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in list">
<td>{{ index+1 }}</td>
<td >{{ item.name }}</td>
<td>{{ item.price }}</td>
<td>
<button @click="handleReduce(index)" :disabled="item.count===1">-</button>
{{ item.count }}
<button @click="handleAdd(index)" >+</button>
</td>
<td>
<button @click="handleRemove(index)">移除</button>
</td>
</tr>
</tbody>
</table>
<div>总价: Y {{ totalPrice }}</div>
</template>
<div v-else>购物车为空</div>
</div>
<!--将vue.min.js和index.js文件写在<body>的最底部,如果写在<head>里,vue实例将无法创建,因为此时dom还没有被解析完成,除非通过异步或在事件domc触发时再创建vue实例-->
</body>
<script>
let app = new Vue({
el: '#app',
// 我们需要的数据比较简单,只有一个列表,里面包含了商品名称,单价,购买数量.在实际业务中,这个列表是通过ajax从服务端动态获取的,我们这里制作示例,直写入data选项内
data: {
list:[
{
id: 1,
name: 'iphone 7',
price: 6188,
count: 1
},
{id: 2,
name: 'iphone 8',
price: 6488,
count: 1
},
{
id: 3,
name: 'iphone 9',
price: 9188,
count: 1
}
]
},
// 总价totalPrice是依赖于商品列表而动态变化的,所以用计算属性来实现,顺便将结果转化为带有前位分隔符的数字
computed:{
totalPrice: function () {
let total = 0;
for (let i=0; i<this.list.length; i++){
let item = this.list[i];
total += item.price * item.count;
}
return total.toString().replace(/\B(?=(\d{3})+$)/g ,',');
}
},
methods:{
handleReduce: function (index){
if (this.list[index].count ===1) return;
this.list[index].count--;
},
handleAdd: function (index) {
this.list[index].count++ ;
},
handleRemove: function (index) {
this.list.splice(index, 0)
}
}
});
</script>
<style>
[v-clock] {
display: none;
}
table {
border: 1px solid #e9e9e9;
border-collapse:collapse ;
border-spacing: 0;
empty-cells: show;
}
th, td {
padding: 8px 16px;
border: 1px solid #e9e9e9;
text-align: left;
}
th{
background: #f7f7f7;
color: #5c6b77;
font-weight: 600;
white-space: nowrap;
}
</style>
</html>
生前无需久睡,死后自会长眠,努力解决生活中遇到的各种问题,不畏将来,勇敢面对,加油,你是最胖的,哈哈哈

浙公网安备 33010602011771号