<!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>
</head>
<body>
<div id="app">
<div v-for="(item,index) in list" :key="item.id">
<input type="checkbox" v-model="item.check">
<span>{{item.num}}</span>
<span style="color: red; font-size: 24px; font-weight: 900;">{{item.num * item.price}}¥</span>
</div>
<div>
<span>全选
<input type="checkbox" v-model="allcheck">
</span>
</div>
<button>总价{{price}}</button>
<button>总计({{total}})</button>
</div>
<script src="../js/vue.js"></script>
<script>
const newList = [
{id:1,check:false,num:2,price:10},
{id:2,check:false,num:3 ,price:5},
{id:3,check:false,num:4,price:12},
{id:4,check:false,num:1,price:6},
]
const vm = new Vue({
el : '#app',
data : {
list:JSON.parse(localStorage.getItem('list')) || newList
},
computed:{
allcheck:{
get(){
return this.list.every(item=>item.check)//反选
},
set(value){
this.list.forEach(item=>item.check = value)
}
},
total(){
return this.list.reduce((sum,item)=>{
if(item.check){
return sum+item.num
}else{
return sum
}
},0)
},
price(){
return this.list.reduce((sum,item)=>{
if(item.check){
return sum+item.num*item.price
}else{
return sum
}
},0)
}
},
watch:{
list:{
deep:true,
immediate:true,
handler(newValue){
console.log(newValue);
localStorage.setItem('list',JSON.stringify(newValue))
}
}
}
})
</script>
</body>
</html>
使用计算属性和监听实现购物车的逻辑
最新推荐文章于 2024-08-09 21:30:00 发布