整段代碼如下
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>checked復(fù)選框測(cè)試(購(gòu)物車)</title>
<style type="text/css">
.books {
border: none;
border-collapse: collapse;
}
th,
td {
border: 1px solid #DDDDDD;
padding: 10px;
width: 50px;
text-align: center;
}
th:nth-child(2),
td:nth-child(2) {
width: 200px;
}
.btn-clear {
padding: 2px 15px;
border: 1px solid #DDDDDD;
margin: 20px;
outline: none;
background-color: rgba(9, 120, 78, 0.7);
color: white;
}
.btn-del {
border: none;
background: transparent;
outline: none;
}
td:last-child:hover {
cursor: pointer;
background-color: #DDDDDD;
}
</style>
</head>
<body>
<div id="app">
<div class="bookList" v-if="books.length>0">
<table border="none" class="books">
<tr>
<th>
<input type="checkbox" v-model="checkedAll" @change="checkAll" />
</th>
<th>書(shū)名</th>
<th>價(jià)格</th>
<th>頁(yè)數(shù)</th>
<th>操作</th>
</tr>
<tr v-for="(item,index) in books" :key="index">
<td>
<input type="checkbox" v-model="item.checked" @change="itemChange(index)" />
</td>
<td>{{item.name}}</td>
<td>{{item.price}}</td>
<td>{{item.pages}}</td>
<td>
<button class="btn btn-del" @click="delBook(index)">刪除</button>
</td>
</tr>
</table>
<div class="sumMsg">
<button class="btn btn-clear" @click="clear">清空</button>
<span>商品總價(jià)為:{{sumPrice}}</span>
</div>
</div>
<div class="empty" v-else>
購(gòu)物車為空
</div>
</div>
<script src="../js/vue.js"></script>
<script type="text/javascript">
const app = new Vue({
el: '#app',
data: {
checkedAll: false,
books: [{
name: 'JAVA編程',
price: 188,
pages: 200,
checked: false
},
{
name: 'C++編程',
price: 108,
pages: 120,
checked: false
},
{
name: 'Python編程',
price: 118,
pages: 220,
checked: false
},
{
name: 'Vue編程',
price: 98,
pages: 240,
checked: true
}
]
},
methods: {
checkAll() {
this.books.forEach(item => {
item.checked = this.checkedAll
})
},
itemChange(index) {
const preCheckedAll = this.checkedAll
if (!this.books[index].checked) {
this.checkedAll = false
} else {
this.checkedAll=!this.books.some(item => !item.checked)
}
},
delBook(index) {
this.books.splice(index, 1)
},
clear() {
this.books.splice(0)
}
},
computed: {
sumPrice() {
let sumPrice = 0
this.books.forEach(item => {
if (item.checked) {
sumPrice += item.price
}
})
return sumPrice
}
}
})
</script>
</body>
</html>
頁(yè)面顯示效果
實(shí)現(xiàn)內(nèi)容
1.全選/全不選
2.計(jì)算已選商品總價(jià)
3.刪除指定商品
4.清空購(gòu)物車
效果