<!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">
<input type="checkbox" v-model="flag">全选
<ul>
<li v-for="(item, index) in list" :key="index"><input type="checkbox" name="" id="" v-model="item.show">{{item.name}}</li>
</ul>
</div>
</body>
</html>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
const obj = new Vue({
el: '#app',
data: {
list: [
{ show: false, name: 'zs' },
{ show: true, name: 'ls'},
{ show: false, name: '大西瓜'},
{ show: true, name: '夏普'}
]
},
methods: {
},
computed: { // 计算属性比事件好的优势在于计算属性有缓存
flag: {
get() {
let shows = null
let obj = []
this.list.forEach(item => {
if(item.show === true) {
obj.push(item) // 将list中的每一项为true添加到新数组中, 只有所有都为true的情况下说明list的每一项都为true了,即obj的长度等于list的长度
}
})
if(obj.length === this.list.length) {
shows = true
} else {
shows = false
}
return shows
},
set(value) {
this.list.forEach(item => {
item.show = value
})
}
}
}
})
</script>
计算属性全选反选
最新推荐文章于 2023-04-12 16:09:42 发布