vue 实现多选全选
Vue 实现多选全选功能
多选全选功能在表格或列表中很常见,以下是实现方法:
基础实现
-
定义数据模型
data() { return { items: [ { id: 1, name: 'Item 1', selected: false }, { id: 2, name: 'Item 2', selected: false }, { id: 3, name: 'Item 3', selected: false } ], selectAll: false } } -
全选逻辑

methods: { toggleSelectAll() { this.items.forEach(item => { item.selected = this.selectAll }) } } -
模板部分
<template> <div> <label> <input type="checkbox" v-model="selectAll" @change="toggleSelectAll"> 全选 </label> <div v-for="item in items" :key="item.id"> <label> <input type="checkbox" v-model="item.selected"> {{ item.name }} </label> </div> </div> </template>
高级实现(带反向检查)
-
计算属性检查全选状态

computed: { selectAll: { get() { return this.items.length > 0 && this.items.every(item => item.selected) }, set(value) { this.items.forEach(item => { item.selected = value }) } } } -
简化模板
<template> <div> <label> <input type="checkbox" v-model="selectAll"> 全选 </label> <div v-for="item in items" :key="item.id"> <label> <input type="checkbox" v-model="item.selected"> {{ item.name }} </label> </div> </div> </template>
表格场景实现
-
表格结构实现
<template> <table> <thead> <tr> <th> <input type="checkbox" v-model="selectAll"> </th> <th>名称</th> <th>价格</th> </tr> </thead> <tbody> <tr v-for="item in items" :key="item.id"> <td><input type="checkbox" v-model="item.selected"></td> <td>{{ item.name }}</td> <td>{{ item.price }}</td> </tr> </tbody> </table> </template> -
获取选中项方法
methods: { getSelectedItems() { return this.items.filter(item => item.selected) } }
注意事项
- 当使用v-for渲染列表时,确保为每个元素设置唯一的key属性
- 大型数据集考虑性能优化,可能需要使用虚拟滚动
- 选中状态变化可以触发watch监听器执行后续操作






