vue 如何实现多选
Vue 实现多选的几种方法
使用 v-model 绑定数组
在 Vue 中,可以通过 v-model 绑定一个数组来实现多选功能。当用户勾选多个选项时,选中的值会自动添加到数组中。
<template>
<div>
<label v-for="option in options" :key="option.value">
<input
type="checkbox"
v-model="selectedOptions"
:value="option.value"
>
{{ option.label }}
</label>
<p>Selected options: {{ selectedOptions }}</p>
</div>
</template>
<script>
export default {
data() {
return {
options: [
{ value: 'apple', label: 'Apple' },
{ value: 'banana', label: 'Banana' },
{ value: 'orange', label: 'Orange' }
],
selectedOptions: []
}
}
}
</script>
使用第三方组件库
如果需要更丰富的多选功能(如搜索、分组等),可以使用第三方组件库如 Element UI 或 Vuetify。

Element UI 示例:
<template>
<el-checkbox-group v-model="selectedOptions">
<el-checkbox
v-for="option in options"
:key="option.value"
:label="option.value"
>
{{ option.label }}
</el-checkbox>
</el-checkbox-group>
</template>
Vuetify 示例:

<template>
<v-checkbox
v-model="selectedOptions"
v-for="option in options"
:key="option.value"
:label="option.label"
:value="option.value"
></v-checkbox>
</template>
自定义多选组件
如果需要完全自定义多选逻辑,可以封装一个多选组件。
<template>
<div>
<div
v-for="option in options"
:key="option.value"
@click="toggleSelection(option.value)"
:class="{ 'selected': selectedOptions.includes(option.value) }"
>
{{ option.label }}
</div>
</div>
</template>
<script>
export default {
props: {
options: Array,
value: Array
},
data() {
return {
selectedOptions: this.value || []
}
},
methods: {
toggleSelection(value) {
const index = this.selectedOptions.indexOf(value)
if (index === -1) {
this.selectedOptions.push(value)
} else {
this.selectedOptions.splice(index, 1)
}
this.$emit('input', this.selectedOptions)
}
}
}
</script>
多选表格实现
在表格中实现多选功能时,可以结合 v-model 和行选择逻辑。
<template>
<table>
<thead>
<tr>
<th><input type="checkbox" v-model="selectAll"></th>
<th>Name</th>
</tr>
</thead>
<tbody>
<tr v-for="item in items" :key="item.id">
<td>
<input
type="checkbox"
v-model="selectedItems"
:value="item.id"
>
</td>
<td>{{ item.name }}</td>
</tr>
</tbody>
</table>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' }
],
selectedItems: []
}
},
computed: {
selectAll: {
get() {
return this.selectedItems.length === this.items.length
},
set(value) {
this.selectedItems = value ? this.items.map(item => item.id) : []
}
}
}
}
</script>
以上方法涵盖了从基础到进阶的多选实现方式,可以根据具体需求选择合适的方法。






