vue购物车
案例需要引入vue.js,使用时自行引入
<div id="app">
全选<input type="checkbox" v-model="totalCheck">
<hr>
<ul>
<li v-for="(r,i) in dataList">
<input type="checkbox" v-model="r.choose">
--标题:{{r.name}}
--价格: {{r.price}}
--数量:<button @click="reduce(i)">-</button> <input type="number" v-model="r.num" min="0"> <button
@click="add(i)">+</button>
--单件商品总价:{{r.num*r.price}}
-- <button @click="del(i)">删除</button>
</li>
</ul>
<hr>
<p>当前选中<span v-text="totalNum" class="totalNum"></span>件商品</p>
<hr>
<p>当前购物车总价:<span class="totalNum">{{totalPrice}}</span></p>
</div>
new Vue({
el: '#app',
data() {
return {
// 数据列表
dataList: [
{
name: "华为P50 Pro",
price: 9000,
num: 1,
choose:false // 判断是否选中
},
{
name: "小米11尊享版",
price: 5000,
num: 1,
choose:false
},
{
name: "Vivo X60s",
price: 4000,
num: 1,
choose:true
},
],
}
},
methods: {
reduce(e) { // 点击减号
if (this.dataList[e].num) // 控制商品数量不为负数
this.dataList[e].num--;
},
add(e) { // 点击加号
this.dataList[e].num++;
},
del(e){ // 点击删除
this.dataList.splice(e,1)
}
},
computed:{ // 计算属性
totalNum(){ // 选中商品的数量
let arr=this.dataList.filter(r=>{
return r.choose==true; // 查找选择框被选中的商品,并将它们返回给数组arr
});
console.log(arr.length);
return arr.length; // 选中商品的数量就等于arr的长度
},
totalCheck:{ // 全选按钮
get(){ // 通过商品的选择框控制全选的框子
if(this.totalNum==this.dataList.length){ // 当选中商品的数量等于商品的总数量是,表示商品被全选了
return true; // 全选框选中
}else{
return false; // 全选框未选中
}
},
set(e){ // 操作全选框,改变所有商品的选中情况
console.log(e); // totalCheck 的值
if(e){ // 如果totalCheck的值为true 就表示全选的框子被选中了,就要进行以下的操作
this.dataList.map(r=>{
return r.choose=true; // 让购物车的每一项都选中
})
}else{ // 全选框没有被选中
this.dataList.map(r=>{
return r.choose=false; // 购物车的每一项都未选中
})
}
}
},
totalPrice(){ // 总价
let sum=0;
this.dataList.forEach(r=>{
if(r.choose){ // 判断商品是否被选中
sum+=r.price*r.num; // 总价等于选中商品的数量*选中商品的价格
}
})
return sum;
}
},
});
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
}
input[type="number"] {
width: 40px;
text-align: center;
}
.totalNum{
font-size: 22px;
color: #f00;
}