Фильтрация столбцов в Element Plus реализуется через
компонент el-table с использованием
свойства filters и обработчиков
фильтрации. Этот механизм позволяет создавать удобные интерактивные
таблицы, где данные могут быть отфильтрованы по заданным критериям без
дополнительной логики на стороне сервера.
Каждый столбец таблицы в Element Plus задается через компонент
el-table-column, где фильтры указываются с
помощью свойства filters. Формат массива
фильтров следующий:
filters: [
{ text: 'Активные', value: 'active' },
{ text: 'Неактивные', value: 'inactive' }
]
Здесь text — отображаемое название фильтра,
value — значение, которое будет использоваться в функции
фильтрации.
Для включения фильтрации необходимо добавить атрибут
filter-method, который принимает функцию с
параметрами (value, row, column):
<el-table :data="tableData">
<el-table-column prop="status" label="Статус"
:filters="statusFilters"
:filter-method="filterStatus"
filter-placement="bottom-end">
</el-table-column>
</el-table>
<script>
export default {
data() {
return {
tableData: [
{ name: 'Иван', status: 'active' },
{ name: 'Мария', status: 'inactive' },
],
statusFilters: [
{ text: 'Активные', value: 'active' },
{ text: 'Неактивные', value: 'inactive' }
]
}
},
methods: {
filterStatus(value, row) {
return row.status === value;
}
}
}
</script>
Ключевые моменты:
prop определяет поле объекта данных, по которому
выполняется фильтрация.filter-method отвечает за логику фильтрации, возвращает
true, если строка должна отображаться.filter-placement задает расположение панели
фильтров.Для поддержки выбора нескольких значений одновременно используется
атрибут filter-multiple:
<el-table-column prop="status" label="Статус"
:filters="statusFilters"
:filter-method="filterStatus"
:filter-multiple="true">
</el-table-column>
Функция фильтрации при множественном выборе принимает массив выбранных значений:
filterStatus(values, row) {
return values.includes(row.status);
}
Фильтрацию можно задавать и программно через
ref таблицы:
<el-table ref="userTable" :data="tableData">
<el-table-column prop="status" label="Статус" :filters="statusFilters" :filter-method="filterStatus"/>
</el-table>
this.$refs.userTable.clearFilter(); // Очистка фильтров
this.$refs.userTable.filter('status', 'active'); // Применение фильтра по ключу
Использование методов clearFilter и filter
позволяет динамически изменять фильтры без перезагрузки данных.
Элемент фильтров поддерживает слот
header для кастомного рендеринга:
<el-table-column prop="status" label="Статус">
<template #header="scope">
<el-input placeholder="Поиск статуса" v-model="statusSearch"
@input="applyCustomFilter(scope.column)">
</el-input>
</template>
</el-table-column>
methods: {
applyCustomFilter(column) {
this.$refs.userTable.filter(column, this.statusSearch);
}
}
Такой подход позволяет создавать фильтры с текстовым поиском или сложной логикой.
При больших объёмах данных рекомендуется:
filter-method, которая
выполняется для каждой строки при каждом изменении фильтра.prop для соответствия полю
данных.filter-multiple.ref для
динамических интерфейсов.Фильтрация столбцов в Element Plus — мощный инструмент, позволяющий создавать гибкие таблицы с интерактивной и настраиваемой логикой отображения данных.