В библиотеке Naive UI выбор строк (row selection) является важным компонентом при работе с таблицами (n-data-table). Он позволяет пользователю выделять одну или несколько строк для дальнейшей обработки, фильтрации или выполнения операций над выбранными элементами. Управление выбором строк реализуется через свойства таблицы и соответствующие события.
Для включения выбора строк используется свойство
rowSelection. Оно может быть объектом с настройками или
булевым значением. Основные параметры:
'single' (одиночный выбор) или 'multiple'
(множественный выбор).Пример конфигурации множественного выбора:
const rowSelection = {
type: 'multiple',
selectedRowKeys: reactive([]),
onChange: (keys, rows) => {
console.log('Выбранные ключи:', keys)
console.log('Выбранные строки:', rows)
},
getCheckboxProps: row => ({
disabled: row.disabled
})
}
В этом примере selectedRowKeys хранит актуальные
выбранные строки, а getCheckboxProps позволяет отключить
выбор для определённых элементов.
Ключом (key) каждой строки является уникальное свойство
объекта данных, обычно id. Без указания ключа выбор строк
работать не будет корректно. Используется атрибут
row-key:
<n-data-table
:columns="columns"
:data="tableData"
row-key="id"
:row-selection="rowSelection"
/>
row-key может принимать строку (имя свойства) или
функцию:
rowKey: row => row.uniqueId
Это особенно полезно, если структура данных сложная или ключ формируется динамически.
Выбор строк можно контролировать программно, изменяя массив
selectedRowKeys. Например, выделить первые две строки при
загрузке:
selectedRowKeys.value = [tableData[0].id, tableData[1].id]
Для снятия выбора достаточно очистить массив:
selectedRowKeys.value = []
Использование реактивного состояния из Vue 3 позволяет таблице автоматически обновлять видимые чекбоксы при изменении массива.
Naive UI предоставляет события для отслеживания действий пользователя:
Пример обработки всех событий:
const rowSelection = {
type: 'multiple',
selectedRowKeys: reactive([]),
onChange: (keys, rows) => console.log('Изменение выбора', keys, rows),
onSelectAll: (checked, rows) => console.log('Выбор всех', checked, rows),
onSelect: (row, checked) => console.log('Выбор строки', row, checked)
}
Можно полностью контролировать отображение чекбоксов для каждой
строки через слот selection-column или функцию
getCheckboxProps. Например, для отображения кастомного
состояния:
getCheckboxProps: row => ({
disabled: row.status === 'inactive',
label: `Выбрать ${row.name}`
})
Здесь строки с status: 'inactive' будут недоступны для
выбора.
Выбор только активных элементов Использовать
getCheckboxProps для отключения неактивных строк.
Синхронизация с внешним состоянием Привязка
selectedRowKeys к глобальному стору позволяет использовать
выбор таблицы в других компонентах.
Выбор по условию Можно автоматически выделять строки, удовлетворяющие фильтру:
selectedRowKeys.value = tableData
.filter(row => row.score > 80)
.map(row => row.id)
selectedRowKeys,
достаточно уникальных ключей.Выбор строк в Naive UI предоставляет гибкий и мощный инструмент для
управления данными в таблицах. Правильная конфигурация
rowSelection, слотов и обработчиков событий позволяет
реализовать как простую, так и сложную логику выделения с минимальными
усилиями.