Quasar Framework предоставляет мощный и гибкий инструмент для
построения таблиц с помощью компонента QTable. Ключевым
элементом управления отображением данных в таблицах является
конфигурация колонок, которая позволяет задавать
поведение, внешний вид и функциональные возможности каждой колонки.
Колонки задаются через массив объектов, передаваемых в проп
columns компонента QTable:
const columns = [
{
name: 'id',
label: 'ID',
align: 'left',
field: row => row.id,
sortable: true,
required: true
},
{
name: 'name',
label: 'Имя',
align: 'left',
field: 'name',
sortable: true
},
{
name: 'age',
label: 'Возраст',
align: 'right',
field: row => row.age,
sortable: true
}
]
Ключевые параметры объекта колонки:
left, right, center).Поле field может быть как строкой, соответствующей ключу
объекта данных, так и функцией, возвращающей значение для конкретной
строки:
field: row => `${row.firstName} ${row.lastName}`
Это позволяет динамически формировать содержимое ячейки на основе других данных.
Сортировка колонок задается через свойство sortable. По
умолчанию Quasar поддерживает встроенную сортировку,
которая работает автоматически для простых типов данных. Для сложных
структур можно использовать sortMethod:
{
name: 'fullName',
label: 'Полное имя',
field: row => `${row.firstName} ${row.lastName}`,
sortable: true,
sortMethod: (a, b) => a.localeCompare(b)
}
sortMethod получает значения ячеек и возвращает
отрицательное, нулевое или положительное число для определения порядка
сортировки.
Для тонкой настройки отображения используется format или
слот body-cell-{name}. Пример использования
format:
{
name: 'price',
label: 'Цена',
field: 'price',
format: val => `$${val.toFixed(2)}`,
align: 'right'
}
С помощью слотов можно полностью переопределить рендеринг:
<template v-slot:body-cell-price="props">
<q-td :props="props">
<span :class="{'text-positive': props.value > 100, 'text-negative': props.value <= 100}">
${{ props.value }}
</span>
</q-td>
</template>
Колонкам можно задавать кастомные CSS-классы через свойства
headerClass и classes:
headerClass – применяется к заголовку колонки.classes – применяется к ячейкам колонки.{
name: 'status',
label: 'Статус',
field: 'status',
headerClass: 'text-center bg-grey-3',
classes: row => row.status === 'active' ? 'text-positive' : 'text-negative'
}
Для управления шириной и фиксированным положением колонок
используются свойства style и width:
{
name: 'id',
label: 'ID',
field: 'id',
width: '80px',
style: 'min-width: 80px;'
}
Колонки можно фиксировать слева или справа через слот
q-table с использованием CSS position: sticky
для создания «липких» заголовков или колонок.
Колонки могут быть скрытыми, если добавить параметр
visible:
{
name: 'secret',
label: 'Секрет',
field: 'secret',
visible: false
}
Динамическое управление колонками позволяет менять видимые колонки на лету:
columns.find(c => c.name === 'secret').visible = true
Quasar поддерживает группировку колонок с помощью
header:
[
{
name: 'personal',
label: 'Персональные данные',
align: 'center',
header: true,
children: [
{ name: 'firstName', label: 'Имя', field: 'firstName' },
{ name: 'lastName', label: 'Фамилия', field: 'lastName' }
]
}
]
Это позволяет объединять несколько колонок под единым заголовком.
Quasar предоставляет специальные типы колонок для интерактивного взаимодействия:
{
name: 'selected',
label: '',
field: 'selected',
type: 'checkbox'
}
Или можно использовать слоты для кастомных компонентов:
<template v-slot:body-cell-selected="props">
<q-td :props="props">
<q-checkbox v-model="props.row.selected" />
</q-td>
</template>
field может быть строкой или функцией для вычисляемых
значений.sortable и
sortMethod.format или слоты позволяет
кастомизировать ячейки.classes,
headerClass, style, width.visible.Конфигурация колонок в Quasar обеспечивает полный контроль над таблицей, позволяя создавать как простые списки, так и сложные интерактивные интерфейсы с динамическими данными.