В Naive UI таблицы и списки часто требуют точной
настройки колонок для корректного отображения данных. Колонки
представляют собой объекты с набором свойств, определяющих их заголовок,
ключ, ширину, выравнивание, форматирование и поведение при изменении
размера окна. Основная структура колонок задаётся через массив объектов,
передаваемый в компонент n-data-table или
n-table.
const columns = [
{
title: 'Имя',
key: 'name',
width: 150,
align: 'left',
},
{
title: 'Возраст',
key: 'age',
width: 100,
align: 'center',
},
{
title: 'Профессия',
key: 'job',
width: 200,
align: 'left',
}
]
'left', 'center', 'right'.Для сложных таблиц с большим количеством данных часто требуется
фиксировать определённые колонки. Свойство fixed позволяет
закрепить колонку слева или справа.
{
title: 'ID',
key: 'id',
width: 80,
fixed: 'left'
}
'left' — колонка закреплена слева.'right' — колонка закреплена справа.Адаптивная ширина колонок достигается установкой свойства
minWidth вместо width, что позволяет колонке
расширяться, если это необходимо, сохраняя минимальный размер.
{
title: 'Описание',
key: 'description',
minWidth: 200,
align: 'left'
}
Для кастомного отображения данных используется слот
render или функция render внутри колонки. Это
позволяет выводить не просто текст, а сложные компоненты, кнопки, иконки
и условное форматирование.
{
title: 'Статус',
key: 'status',
render: (row) => {
return row.status === 'active'
? h('span', { style: { color: 'green' } }, 'Активен')
: h('span', { style: { color: 'red' } }, 'Неактивен')
}
}
Функция render принимает текущую строку данных и индекс,
что даёт полный контроль над визуализацией содержимого колонки.
Свойства sortable и filters позволяют
добавлять интерактивные возможности колонок:
{
title: 'Возраст',
key: 'age',
sortable: true
}
text и
value для фильтрации по конкретным значениям.{
title: 'Страна',
key: 'country',
filters: [
{ text: 'Россия', value: 'RU' },
{ text: 'США', value: 'US' },
{ text: 'Германия', value: 'DE' }
],
filterMultiple: true
}
Naive UI поддерживает динамическую перестановку колонок с помощью
свойства draggable. Колонки могут быть перетаскиваемыми,
что удобно для интерфейсов с пользовательскими настройками
отображения.
{
title: 'Email',
key: 'email',
draggable: true
}
События on-column-drag-start и
on-column-drag-end позволяют отслеживать начало и
завершение перетаскивания для обновления состояния приложения.
С помощью children можно создавать многоуровневые
заголовки, объединяя несколько колонок под одной группой:
{
title: 'Контактные данные',
key: 'contact',
children: [
{ title: 'Email', key: 'email', width: 200 },
{ title: 'Телефон', key: 'phone', width: 150 }
]
}
Это особенно полезно для крупных таблиц, где требуется логическая группировка полей.
Колонки могут изменяться на лету через реактивные объекты Vue. Это позволяет включать/выключать колонки, менять их ширину, порядок или добавлять новые без перезагрузки компонента:
const columns = reactive([
{ title: 'Имя', key: 'name', width: 150 },
{ title: 'Возраст', key: 'age', width: 100 }
])
function addColumn() {
columns.push({ title: 'Профессия', key: 'job', width: 200 })
}
Реактивность гарантирует, что таблица автоматически обновится при изменении массива колонок.
key для каждой колонки для корректного
рендеринга и оптимизации.minWidth для адаптивной ширины, особенно
при работе с разными разрешениями экрана.render.fixed.Такое комплексное управление колонками позволяет строить таблицы любой сложности, сочетая визуальную гибкость и интерактивность с минимальными затратами на код.