Для работы с таблицами в Element Plus используется
компонент <el-table>, который обеспечивает мощный
функционал отображения, сортировки и фильтрации данных. Таблица строится
на основе массива объектов, где каждая запись соответствует одной
строке, а свойства объектов — столбцам.
<template>
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="date" label="Дата" width="180"></el-table-column>
<el-table-column prop="name" label="Имя" width="180"></el-table-column>
<el-table-column prop="address" label="Адрес"></el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [
{ date: '2026-03-18', name: 'Иван Иванов', address: 'Москва, ул. Ленина, 10' },
{ date: '2026-03-17', name: 'Мария Петрова', address: 'Санкт-Петербург, Невский пр., 15' },
{ date: '2026-03-16', name: 'Сергей Кузнецов', address: 'Новосибирск, ул. Красный пр., 5' },
],
};
},
};
</script>
Ключевые моменты:
:data — связывает таблицу с массивом данных.<el-table-column> определяет отдельный
столбец.prop — имя свойства объекта, которое будет отображено в
колонке.label — заголовок столбца.width — фиксированная ширина колонки (необязательный
параметр).Element Plus позволяет добавлять сортировку и фильтры для каждого столбца.
<el-table-column prop="name" label="Имя" sortable></el-table-column>
sortable автоматически добавляет стрелки для
сортировки.<el-table-column
prop="date"
label="Дата"
:sortable="(a, b) => new Date(a.date) - new Date(b.date)">
</el-table-column>
<el-table-column
prop="address"
label="Город"
:filters="[
{ text: 'Москва', value: 'Москва' },
{ text: 'Санкт-Петербург', value: 'Санкт-Петербург' }
]"
:filter-method="filterCity"
>
</el-table-column>
methods: {
filterCity(value, row) {
return row.address.includes(value);
}
}
filters задаёт доступные варианты фильтрации.filter-method определяет логику фильтрации.Для отображения данных нестандартным образом применяется слот
default:
<el-table-column prop="name" label="Имя">
<template #default="{ row }">
<strong>{{ row.name }}</strong>
</template>
</el-table-column>
#default можно использовать весь объект строки
(row) для сложных рендеров.<el-table
:data="tableData"
style="width: 100%"
@selection-change="handleSelection">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="name" label="Имя"></el-table-column>
<el-table-column prop="address" label="Адрес"></el-table-column>
</el-table>
type="selection" добавляет чекбоксы для выбора
строк.@selection-change возвращает массив выбранных
объектов.border — отображение границ таблицы:<el-table :data="tableData" border></el-table>
stripe — чередующиеся полосы строк:<el-table :data="tableData" stripe></el-table>
highlight-current-row — подсветка выбранной
строки:<el-table :data="tableData" highlight-current-row></el-table>
row-class-name — функция для динамического класса
строк:<el-table :data="tableData" :row-class-name="rowClassName">
methods: {
rowClassName({ row, rowIndex }) {
return rowIndex % 2 === 0 ? 'even-row' : 'odd-row';
}
}
<el-table :data="tableData" style="width: 100%" height="300">
<el-table-column fixed prop="name" label="Имя" width="120"></el-table-column>
<el-table-column prop="address" label="Адрес"></el-table-column>
<el-table-column prop="date" label="Дата" width="150"></el-table-column>
</el-table>
fixed закрепляет колонку слева.height, чтобы
включить вертикальную прокрутку.Для работы с большим массивом данных удобно сочетать
<el-table> с <el-pagination>:
<template>
<el-table :data="pagedData">
<el-table-column prop="name" label="Имя"></el-table-column>
<el-table-column prop="address" label="Адрес"></el-table-column>
</el-table>
<el-pagination
:current-page="currentPage"
:page-size="pageSize"
:total="tableData.length"
@current-change="handlePageChange">
</el-pagination>
</template>
<script>
export default {
data() {
return {
tableData: [...Array(100).keys()].map(i => ({
name: `Пользователь ${i}`,
address: `Город ${i}`
})),
currentPage: 1,
pageSize: 10
};
},
computed: {
pagedData() {
const start = (this.currentPage - 1) * this.pageSize;
return this.tableData.slice(start, start + this.pageSize);
}
},
methods: {
handlePageChange(page) {
this.currentPage = page;
}
}
};
</script>
:current-page и @current-change управляют
активной страницей.pagedData формирует подмассив для
текущей страницы.Основная структура таблицы в Element Plus строится на трёх ключевых элементах:
data) — массив объектов.el-table-column) —
определяют, какие поля отображать и как их визуализировать.Эта комбинация позволяет создавать как простые, так и высокофункциональные интерфейсы с минимальным кодом и максимальной гибкостью отображения данных.