В библиотеке Element Plus сортировка данных
реализована преимущественно через компонент
el-table. Он предоставляет встроенные
механизмы сортировки для колонок таблицы, позволяя управлять
отображением данных по возрастанию или убыванию, а также настраивать
кастомные функции сортировки для сложных случаев.
el-tableДля использования сортировки необходимо определить таблицу с колонками:
<template>
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="name" label="Имя" sortable></el-table-column>
<el-table-column prop="age" label="Возраст" sortable></el-table-column>
<el-table-column prop="salary" label="Зарплата" sortable></el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [
{ name: 'Алексей', age: 28, salary: 50000 },
{ name: 'Мария', age: 32, salary: 75000 },
{ name: 'Иван', age: 24, salary: 45000 },
],
};
},
};
</script>
Ключевые моменты:
sortable на колонке активирует базовую
сортировку по значению поля prop.Для более сложных случаев можно задать кастомную функцию сортировки с
помощью атрибута sort-method:
<el-table-column
prop="name"
label="Имя"
:sortable="true"
:sort-method="customSort"
></el-table-column>
<script>
export default {
methods: {
customSort(a, b) {
// Сортировка по длине имени
return a.name.length - b.name.length;
},
},
};
</script>
Особенности кастомной сортировки:
<0 сортирует a
перед b, >0 – b перед
a, 0 – без изменения порядка.Element Plus предоставляет возможность программно управлять
сортировкой через атрибуты default-sort и события
sort-change.
default-sort:<el-table :data="tableData" :default-sort="{prop: 'age', order: 'descending'}">
<el-table-column prop="name" label="Имя" sortable></el-table-column>
<el-table-column prop="age" label="Возраст" sortable></el-table-column>
</el-table>
prop – поле, по которому изначально выполняется
сортировка.order – направление: 'ascending' или
'descending'.sort-change:<el-table :data="tableData" @sort-change="handleSortChange">
<el-table-column prop="salary" label="Зарплата" sortable></el-table-column>
</el-table>
<script>
export default {
methods: {
handleSortChange({ column, prop, order }) {
console.log(`Сортировка по ${prop} в порядке ${order}`);
},
},
};
</script>
column – объект колонки, где произошла сортировка.prop – имя свойства, по которому выполнена
сортировка.order – текущее направление сортировки.Для сложных таблиц возможно реализовать сортировку по нескольким
колонкам одновременно, используя кастомные функции сортировки или
обработку данных до передачи в таблицу. Прямой встроенной поддержки
многоуровневой сортировки в el-table нет, поэтому
обычно:
computed свойстве с использованием
функции Array.prototype.sort.el-table через :data.При больших объемах данных сортировка может выполняться на сервере. В этом случае:
el-table используется только как визуальный
компонент.sort-change вызывает метод запроса данных с
новыми параметрами сортировки.:data.methods: {
fetchData({ prop, order }) {
axios.get('/api/users', { params: { sortBy: prop, sortOrder: order } })
.then(response => { this.tableData = response.data; });
},
handleSortChange({ prop, order }) {
this.fetchData({ prop, order });
},
}
Для полей с датами, объектами или массивами стандартная сортировка может быть недостаточной. В таких случаях:
sort-method, который преобразует данные в
сравнимый формат.Date.<el-table-column
prop="birthday"
label="Дата рождения"
sortable
:sort-method="(a, b) => new Date(a.birthday) - new Date(b.birthday)"
></el-table-column>
computed) для
фильтрации и сортировки данных без повторной загрузки таблицы.sort-method, чтобы не снижать
производительность при больших объемах данных.ascending / descending.default-sort
или активное состояние стрелок, чтобы пользователь видел текущее
направление сортировки.Эти возможности делают Element Plus гибким инструментом для реализации любой сортировки: от простых таблиц до больших интерактивных приложений с динамической сортировкой данных.