vue实现多选下拉
Vue 实现多选下拉菜单
在 Vue 中实现多选下拉菜单可以通过原生 HTML <select> 元素结合 Vue 的数据绑定,或使用第三方组件库如 Element UI、Vuetify 等。以下是两种常见实现方式:
使用原生 HTML <select> 和多选属性
通过设置 <select> 的 multiple 属性,结合 Vue 的 v-model 实现多选功能。选中的值会以数组形式存储在绑定的变量中。
<template>
<select v-model="selectedItems" multiple>
<option v-for="item in items" :key="item.value" :value="item.value">
{{ item.label }}
</option>
</select>
</template>
<script>
export default {
data() {
return {
selectedItems: [],
items: [
{ value: 'option1', label: 'Option 1' },
{ value: 'option2', label: 'Option 2' },
{ value: 'option3', label: 'Option 3' }
]
};
}
};
</script>
使用 Element UI 的 el-select 组件
Element UI 提供了功能丰富的多选下拉组件 el-select,支持搜索、过滤、自定义模板等功能。
<template>
<el-select v-model="selectedItems" multiple placeholder="请选择">
<el-option
v-for="item in items"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
<script>
export default {
data() {
return {
selectedItems: [],
items: [
{ value: 'option1', label: 'Option 1' },
{ value: 'option2', label: 'Option 2' },
{ value: 'option3', label: 'Option 3' }
]
};
}
};
</script>
使用 Vuetify 的 v-select 组件
Vuetify 的 v-select 组件也支持多选功能,适合 Material Design 风格的项目。
<template>
<v-select
v-model="selectedItems"
:items="items"
label="Select multiple items"
multiple
/>
</template>
<script>
export default {
data() {
return {
selectedItems: [],
items: [
{ text: 'Option 1', value: 'option1' },
{ text: 'Option 2', value: 'option2' },
{ text: 'Option 3', value: 'option3' }
]
};
}
};
</script>
自定义多选下拉组件
如果需要完全自定义样式和功能,可以基于 Vue 实现一个多选下拉组件。以下是一个简单示例:

<template>
<div class="custom-multiselect">
<div class="selected-items" @click="toggleDropdown">
{{ selectedItems.join(', ') || 'Select items' }}
</div>
<div v-if="isOpen" class="dropdown">
<div
v-for="item in items"
:key="item.value"
class="dropdown-item"
@click="toggleItem(item.value)"
>
<input type="checkbox" :checked="selectedItems.includes(item.value)" />
{{ item.label }}
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
isOpen: false,
selectedItems: [],
items: [
{ value: 'option1', label: 'Option 1' },
{ value: 'option2', label: 'Option 2' },
{ value: 'option3', label: 'Option 3' }
]
};
},
methods: {
toggleDropdown() {
this.isOpen = !this.isOpen;
},
toggleItem(value) {
if (this.selectedItems.includes(value)) {
this.selectedItems = this.selectedItems.filter(item => item !== value);
} else {
this.selectedItems.push(value);
}
}
}
};
</script>
<style>
.custom-multiselect {
position: relative;
width: 200px;
}
.dropdown {
position: absolute;
width: 100%;
border: 1px solid #ccc;
background: white;
z-index: 1000;
}
.dropdown-item {
padding: 8px;
cursor: pointer;
}
.dropdown-item:hover {
background: #f0f0f0;
}
</style>
关键点总结
- 使用
multiple属性的原生<select>适合简单需求。 - 第三方库(如 Element UI、Vuetify)提供更多高级功能(搜索、过滤、懒加载等)。
- 自定义组件适合需要完全控制样式和行为的场景。
- 多选数据通常通过数组存储,使用
v-model绑定。






