STree
Дерево элементов.
Что будет ценно улучшить?
- Если сейчас перетаскивать элементы, но ничего не делать по drop-событию, то они не перетаскиваются.
Базовый пример
Главная
Каталог
Контакты
<STree :data="pages" />Где pages — это массив вида: [{id, label, children: [...]}, ...]
Выбор элемента
Для возможности выбора элемента добавляем атрибут selectable
Главная
Каталог
Контакты
В модель подставляется ID. Текущее значение: null
<STree :data="pages" selectable v-model="value" />
<p>В модель подставляется ID. Текущее значение: <code>{{ value ?? 'null' }}</code></p>Также изменения можно отслеживать с помощью change-события:
Главная
Каталог
Контакты
<STree :data="pages" selectable @change="(node) => console.log(node)" />Кастомный шаблон элемента
Главная
Каталог
Контакты
<STree :data="pages">
<template #node="{ node }">
<FontAwesomeIcon :icon="node.icon" v-if="node.icon" /> {{ node.label }}
</template>
</STree>Раскрытые корневые элементы
Набор раскрытых корневых элементов передаём с помощью атрибута expanded-keys
Главная
Электроника
Одежда
Контакты
<STree :data="pages" :expanded-keys="[2]" />Перетаскивание элементов
Для поддержки перетаскивания элементов добавляем атрибут draggable
Главная
Каталог
Контакты
<STree :data="pages" draggable @drop="onDrop" />При этом выполняются события:
- dragstart(node, event) — при начале перетаскивания;
- drop(targetNode, event, dropType) — при заверешнии перетаскивания.
Чек-боксы
Для поддержки чек-боксов у элементов добавляем атрибут checkboxes
Главная
Каталог
Контакты
Выбрано: []
<STree v-model="selectedPageIds" :data="pages" checkboxes />
<p>Выбрано: <code>{{ selectedPageIds }}</code></p>Если нужно, чтобы при выборе чек-бокса автоматически выбирались чек-боксы вложенных элементов, добавьте атрибут select-with-children:
Главная
Каталог
Контакты
Выбрано: []
<STree v-model="selectedPageIds" :data="pages" checkboxes select-with-children />
<p>Выбрано: <code>{{ selectedPageIds }}</code></p>Интерфейс компонента
Свойства (Props)
| Название | Тип | По умолчанию | Описание |
|---|---|---|---|
| data | STreeNode[] | - | Массив данных дерева. |
| expandedKeys | (string | number)[] | [] | Список ID раскрытых узлов. |
| draggable | boolean | false | Разрешить перетаскивание узлов. |
| selectable | boolean | false | Разрешить выбор одного узла (через клик). |
| checkboxes | boolean | false | Отображать чекбоксы для множественного выбора. |
| selectWithChildren | boolean | false | При выборе родителя выбирать всех его детей. |
| storeExpandedKeysTo | string | - | Ключ в localStorage для сохранения состояния раскрытых узлов. |
| bordered | boolean | false | Добавить границы вокруг ячеек. |
События (Events)
| Название | Параметры | Описание |
|---|---|---|
| dragstart | (node: STreeNode, event: DragEvent) | Вызывается при начале перетаскивания узла. |
| drop | (targetNode: STreeNode, event: DragEvent, dropType: string | undefined) | Вызывается при завершении перетаскивания. |
| change | (node: STreeNode) | Вызывается при смене выбранного узла (если selectable). |
Слоты (Slots)
| Название | Параметры | Описание |
|---|---|---|
| node | { node: STreeNode } | Кастомный шаблон для содержимого узла дерева. |