В Quasar Framework сортировка и фильтрация данных играют ключевую
роль при работе с компонентами отображения информации, такими как
<q-table>,
<q-list> и
<q-select>. Библиотека предоставляет
встроенные механизмы для управления этими процессами, что позволяет
создавать гибкие и отзывчивые интерфейсы без необходимости писать
сложный код с нуля.
<q-table>Компонент <q-table> поддерживает
многоуровневую и локальную сортировку. Основные
параметры, отвечающие за сортировку:
sort-method — функция, позволяющая
задавать кастомную логику сортировки.sort-order — направление сортировки
('asc' или 'desc').sortable — булевое значение или массив
полей, которые можно сортировать.Пример базовой сортировки по колонке name:
<q-table
:rows="users"
:columns="columns"
row-key="id"
:sort-method="customSort"
/>
<script>
export default {
data() {
return {
users: [
{ id: 1, name: 'Анна', age: 25 },
{ id: 2, name: 'Борис', age: 30 },
{ id: 3, name: 'Виктор', age: 22 }
],
columns: [
{ name: 'name', label: 'Имя', field: 'name', sortable: true },
{ name: 'age', label: 'Возраст', field: 'age', sortable: true }
]
};
},
methods: {
customSort(rows, col, order) {
return rows.sort((a, b) => {
const valA = a[col.field];
const valB = b[col.field];
if (order === 'asc') return valA > valB ? 1 : -1;
return valA < valB ? 1 : -1;
});
}
}
};
</script>
Ключевые моменты:
sort-method, чтобы реализовать многоуровневую
сортировку.Фильтрация в Quasar реализуется через проп
filter для <q-table> и
<q-select> или через динамическое применение
массивов данных с использованием стандартных методов JavaScript
(filter, includes, match).
Пример фильтрации по имени:
<q-input v-model="search" placeholder="Поиск по имени" outlined />
<q-table
:rows="filteredUsers"
:columns="columns"
row-key="id"
/>
<script>
export default {
data() {
return {
search: '',
users: [
{ id: 1, name: 'Анна', age: 25 },
{ id: 2, name: 'Борис', age: 30 },
{ id: 3, name: 'Виктор', age: 22 }
],
columns: [
{ name: 'name', label: 'Имя', field: 'name' },
{ name: 'age', label: 'Возраст', field: 'age' }
]
};
},
computed: {
filteredUsers() {
if (!this.search) return this.users;
return this.users.filter(user =>
user.name.toLowerCase().includes(this.search.toLowerCase())
);
}
}
};
</script>
Особенности фильтрации:
Quasar позволяет объединять сортировку и фильтрацию для создания комплексного интерфейса управления данными:
computed: {
processedUsers() {
let data = this.users;
// Фильтрация
if (this.search) {
data = data.filter(user =>
user.name.toLowerCase().includes(this.search.toLowerCase())
);
}
// Сортировка
const { field, order } = this.sort;
if (field && order) {
data = data.sort((a, b) => {
const valA = a[field];
const valB = b[field];
if (order === 'asc') return valA > valB ? 1 : -1;
return valA < valB ? 1 : -1;
});
}
return data;
}
}
Такой подход обеспечивает гибкость, позволяя динамически управлять данными без перезагрузки страницы.
body-cell и header-cell.<q-date>, <q-range>).asc/desc) и фильтрации для каждой колонки.Эти подходы делают работу с Quasar эффективной и масштабируемой, позволяя создавать сложные интерфейсы с динамическим отображением данных, готовые к производственным приложениям.