代码很简单,用的es5 Array新增的方法every 和 map 。先来一张效果图
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
<title></title>
</head>
<body>
<div id="app">
<p><input type="checkbox" @change="checkAllBox()" v-model="checkAll" id="all" /><label for="all">全选</label></p>
<p v-for="(item,index) in checkBoxArr" :key="index">
<input type="checkbox" @change="changeItemBox()" v-model="item.check" :id="item.name" />
<label :for="item.name">{{item.name}} - {{item.check}}</label>
</p>
</div>
<script>
new Vue({
el: '#app',
data: {
checkAll: false,
checkBoxArr: [{
id: 0,
name: 'checkBox1',
check: false,
},
{
id: 1,
name: 'checkBox2',
check: false,
},
{
id: 2,
name: 'checkBox3',
check: false,
},
{
id: 3,
name: 'checkBox4',
check: false,
}
]
},
methods: {
changeItemBox() {
//every方法 断言数组每个元素(val.check)都为真,返回true或false
this.checkAll = this.checkBoxArr.every((val, key) => val.check) ? true : false
},
checkAllBox() {
if(this.checkAll) {
this.checkBoxArr.map((val, k) => this.$set(val, 'check', true))
} else {
this.checkBoxArr.map((val, k) => this.$set(val, 'check', false))
}
}
}
})
</script>
</body>
</html>