vue实现多选下拉
Vue 实现多选下拉
使用 Vue 实现多选下拉可以通过原生 HTML <select> 元素结合 Vue 的双向绑定,或者使用第三方组件库如 Element UI、Vuetify 等。以下是几种实现方式:
原生 HTML <select> 实现多选
通过设置 <select> 的 multiple 属性,结合 Vue 的 v-model 实现多选下拉。
<template>
<div>
<select v-model="selectedItems" multiple>
<option v-for="item in items" :key="item.value" :value="item.value">
{{ item.text }}
</option>
</select>
<p>Selected items: {{ selectedItems }}</p>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ value: '1', text: 'Option 1' },
{ value: '2', text: 'Option 2' },
{ value: '3', text: 'Option 3' },
],
selectedItems: [],
};
},
};
</script>
使用 Element UI 的 el-select 组件
Element UI 提供了功能丰富的多选下拉组件 el-select,支持多选、搜索、自定义模板等功能。
<template>
<div>
<el-select v-model="selectedItems" multiple placeholder="Select">
<el-option
v-for="item in items"
:key="item.value"
:label="item.text"
:value="item.value"
/>
</el-select>
<p>Selected items: {{ selectedItems }}</p>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ value: '1', text: 'Option 1' },
{ value: '2', text: 'Option 2' },
{ value: '3', text: 'Option 3' },
],
selectedItems: [],
};
},
};
</script>
使用 Vuetify 的 v-select 组件
Vuetify 的 v-select 组件也支持多选功能,适合 Material Design 风格的项目。
<template>
<div>
<v-select
v-model="selectedItems"
:items="items"
multiple
label="Select"
></v-select>
<p>Selected items: {{ selectedItems }}</p>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ value: '1', text: 'Option 1' },
{ value: '2', text: 'Option 2' },
{ value: '3', text: 'Option 3' },
],
selectedItems: [],
};
},
};
</script>
自定义多选下拉组件
如果需要完全自定义的多选下拉功能,可以通过 Vue 实现一个自定义组件。
<template>
<div class="custom-multiselect">
<div class="selected-items" @click="toggleDropdown">
<span v-if="selectedItems.length === 0">Select options</span>
<span v-else>
{{ selectedItems.map(item => item.text).join(', ') }}
</span>
</div>
<div v-if="isOpen" class="dropdown">
<div
v-for="item in items"
:key="item.value"
@click="toggleItem(item)"
:class="{ selected: isSelected(item) }"
>
{{ item.text }}
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ value: '1', text: 'Option 1' },
{ value: '2', text: 'Option 2' },
{ value: '3', text: 'Option 3' },
],
selectedItems: [],
isOpen: false,
};
},
methods: {
toggleDropdown() {
this.isOpen = !this.isOpen;
},
toggleItem(item) {
const index = this.selectedItems.findIndex(
selected => selected.value === item.value
);
if (index === -1) {
this.selectedItems.push(item);
} else {
this.selectedItems.splice(index, 1);
}
},
isSelected(item) {
return this.selectedItems.some(
selected => selected.value === item.value
);
},
},
};
</script>
<style>
.custom-multiselect {
position: relative;
width: 200px;
}
.selected-items {
border: 1px solid #ccc;
padding: 8px;
cursor: pointer;
}
.dropdown {
position: absolute;
width: 100%;
border: 1px solid #ccc;
background: white;
z-index: 100;
}
.dropdown div {
padding: 8px;
cursor: pointer;
}
.dropdown div.selected {
background: #eee;
}
</style>
以上方法可以根据项目需求选择合适的方式实现多选下拉功能。原生 HTML <select> 适合简单需求,而第三方组件库或自定义组件适合复杂场景。







