Skip to content

STree

Дерево элементов.

Что будет ценно улучшить?
  1. Если сейчас перетаскивать элементы, но ничего не делать по 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)

НазваниеТипПо умолчаниюОписание
dataSTreeNode[]-Массив данных дерева.
expandedKeys(string | number)[][]Список ID раскрытых узлов.
draggablebooleanfalseРазрешить перетаскивание узлов.
selectablebooleanfalseРазрешить выбор одного узла (через клик).
checkboxesbooleanfalseОтображать чекбоксы для множественного выбора.
selectWithChildrenbooleanfalseПри выборе родителя выбирать всех его детей.
storeExpandedKeysTostring-Ключ в localStorage для сохранения состояния раскрытых узлов.
borderedbooleanfalseДобавить границы вокруг ячеек.

События (Events)

НазваниеПараметрыОписание
dragstart(node: STreeNode, event: DragEvent)Вызывается при начале перетаскивания узла.
drop(targetNode: STreeNode, event: DragEvent, dropType: string | undefined)Вызывается при завершении перетаскивания.
change(node: STreeNode)Вызывается при смене выбранного узла (если selectable).

Слоты (Slots)

НазваниеПараметрыОписание
node{ node: STreeNode }Кастомный шаблон для содержимого узла дерева.