В Element Plus компонент
<el-select> является центральным инструментом для
создания выпадающих списков и управления выбором строк. Он поддерживает
как одиночный, так и множественный выбор, а также интеграцию с поиском и
асинхронной загрузкой данных.
<template>
<el-select v-model="selectedValue" placeholder="Выберите элемент">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
<script>
export default {
data() {
return {
selectedValue: '',
options: [
{ value: '1', label: 'Элемент 1' },
{ value: '2', label: 'Элемент 2' },
{ value: '3', label: 'Элемент 3' },
],
};
},
};
</script>
Ключевые моменты:
v-model связывает выбранное значение с состоянием
компонента.placeholder задаёт текст-заглушку до
выбора.<el-option> требует уникальный
:key и корректное сопоставление :value и
:label.Для выбора нескольких элементов используется атрибут
multiple. Значение компонента при этом становится
массивом.
<el-select v-model="selectedValues" multiple placeholder="Выберите элементы">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<script>
export default {
data() {
return {
selectedValues: [],
options: [
{ value: 'a', label: 'Опция A' },
{ value: 'b', label: 'Опция B' },
{ value: 'c', label: 'Опция C' },
],
};
},
};
</script>
Особенности множественного выбора:
collapse-tags, чтобы визуально сокращать
количество выбранных элементов.clearable позволяет пользователю сбросить все
выбранные значения одним кликом.filterable и слот remote-method для
динамического поиска и подгрузки данных.Компонент поддерживает встроенную фильтрацию с помощью атрибута
filterable:
<el-select v-model="searchValue" filterable placeholder="Начните ввод...">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
Для динамического поиска используется комбинация
filterable и remote:
<el-select
v-model="remoteValue"
filterable
remote
reserve-keyword
placeholder="Поиск элементов"
:remote-method="fetchOptions"
>
<el-option
v-for="item in remoteOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<script>
export default {
data() {
return {
remoteValue: '',
remoteOptions: [],
};
},
methods: {
fetchOptions(query) {
if (query !== '') {
// Асинхронный запрос к API
setTimeout(() => {
this.remoteOptions = [
{ value: query + '1', label: query + ' Опция 1' },
{ value: query + '2', label: query + ' Опция 2' },
];
}, 500);
} else {
this.remoteOptions = [];
}
},
},
};
</script>
Принципы работы поиска:
remote-method вызывается при каждом изменении
ввода.reserve-keyword сохраняет введённое значение при
изменении списка опций.multiple для множественного
выбора с динамическим поиском.Element Plus позволяет кастомизировать отображение опций через слоты:
<el-select v-model="customValue" placeholder="Выберите элемент">
<el-option
v-for="item in options"
:key="item.value"
:value="item.value"
>
<template #default>
<span style="color: blue;">{{ item.label }}</span>
</template>
</el-option>
</el-select>
Особенности слотов:
default изменяет стандартное отображение
текста.Компонент <el-select> поддерживает множество
событий:
change — вызывается при изменении выбранного
значения.visible-change — срабатывает при открытии или закрытии
выпадающего списка.remove-tag — используется при удалении выбранной опции
в множественном выборе.clear — вызывается при очистке выбранных значений.<el-select
v-model="selectedValue"
@change="onChange"
clearable
>
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
<script>
export default {
data() {
return {
selectedValue: '',
options: [
{ value: '1', label: 'Элемент 1' },
{ value: '2', label: 'Элемент 2' },
],
};
},
methods: {
onChange(value) {
console.log('Выбрано:', value);
},
},
};
</script>
События позволяют интегрировать компонент с логикой приложения, отправкой данных на сервер и динамическими изменениями интерфейса.
Эти инструменты делают <el-select> гибким и мощным
решением для всех случаев работы с выбором строк в интерфейсе на основе
Element Plus.