vue实现多个全选
实现多个全选功能
在Vue中实现多个全选功能可以通过绑定v-model和计算属性来完成。以下是一个完整的示例代码:
<template>
<div>
<div v-for="(group, index) in groups" :key="index">
<input
type="checkbox"
v-model="group.allChecked"
@change="toggleAll(group)"
> 全选
<div v-for="item in group.items" :key="item.id">
<input
type="checkbox"
v-model="item.checked"
@change="updateAllChecked(group)"
> {{ item.name }}
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
groups: [
{
allChecked: false,
items: [
{ id: 1, name: '选项1', checked: false },
{ id: 2, name: '选项2', checked: false },
{ id: 3, name: '选项3', checked: false }
]
},
{
allChecked: false,
items: [
{ id: 4, name: '选项4', checked: false },
{ id: 5, name: '选项5', checked: false },
{ id: 6, name: '选项6', checked: false }
]
}
]
}
},
methods: {
toggleAll(group) {
group.items.forEach(item => {
item.checked = group.allChecked
})
},
updateAllChecked(group) {
group.allChecked = group.items.every(item => item.checked)
}
}
}
</script>
功能说明
-
数据结构:使用嵌套数组结构存储多个组的选项,每个组包含一个全选状态和多个选项项。
-
全选切换:当点击全选复选框时,
toggleAll方法会将该组下所有选项的状态设置为与全选状态一致。 -
自动更新全选状态:当手动选择或取消单个选项时,
updateAllChecked方法会检查该组所有选项是否都被选中,并相应更新全选状态。 -
响应式绑定:使用
v-model实现复选框与数据的双向绑定,确保UI与数据状态同步。
扩展功能
如果需要获取所有被选中的项目,可以添加计算属性:
computed: {
selectedItems() {
return this.groups.flatMap(group =>
group.items.filter(item => item.checked)
)
}
}
这样可以通过this.selectedItems访问所有被选中的项目。



