vue 实现多选
Vue 实现多选的方法
在 Vue 中实现多选功能可以通过多种方式完成,以下是几种常见的实现方法:
使用 v-model 绑定数组
通过 v-model 绑定一个数组,可以实现多选功能。当用户选择多个选项时,选中的值会自动添加到数组中。

<template>
<div>
<select v-model="selectedItems" multiple>
<option value="item1">Item 1</option>
<option value="item2">Item 2</option>
<option value="item3">Item 3</option>
</select>
<p>Selected items: {{ selectedItems }}</p>
</div>
</template>
<script>
export default {
data() {
return {
selectedItems: []
};
}
};
</script>
使用复选框组
通过复选框组实现多选,每个复选框绑定到数组中的一个值。
<template>
<div>
<label v-for="item in items" :key="item.value">
<input type="checkbox" v-model="selectedItems" :value="item.value">
{{ item.label }}
</label>
<p>Selected items: {{ selectedItems }}</p>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ value: 'item1', label: 'Item 1' },
{ value: 'item2', label: 'Item 2' },
{ value: 'item3', label: 'Item 3' }
],
selectedItems: []
};
}
};
</script>
使用第三方组件库
许多 Vue 第三方组件库(如 Element UI、Vuetify、Ant Design Vue)提供了现成的多选组件,可以直接使用。

以 Element UI 为例:
<template>
<div>
<el-select v-model="selectedItems" multiple placeholder="Select">
<el-option
v-for="item in items"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<p>Selected items: {{ selectedItems }}</p>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ value: 'item1', label: 'Item 1' },
{ value: 'item2', label: 'Item 2' },
{ value: 'item3', label: 'Item 3' }
],
selectedItems: []
};
}
};
</script>
自定义多选组件
如果需要更复杂的多选功能,可以自定义一个多选组件。
<template>
<div>
<div class="custom-multiselect">
<div
v-for="item in items"
:key="item.value"
class="option"
:class="{ selected: selectedItems.includes(item.value) }"
@click="toggleSelection(item.value)"
>
{{ item.label }}
</div>
</div>
<p>Selected items: {{ selectedItems }}</p>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ value: 'item1', label: 'Item 1' },
{ value: 'item2', label: 'Item 2' },
{ value: 'item3', label: 'Item 3' }
],
selectedItems: []
};
},
methods: {
toggleSelection(value) {
const index = this.selectedItems.indexOf(value);
if (index === -1) {
this.selectedItems.push(value);
} else {
this.selectedItems.splice(index, 1);
}
}
}
};
</script>
<style>
.custom-multiselect {
border: 1px solid #ccc;
padding: 5px;
}
.option {
padding: 5px;
cursor: pointer;
}
.option.selected {
background-color: #409eff;
color: white;
}
</style>
以上方法可以根据具体需求选择适合的方式实现多选功能。






