TreeNode является ключевым элементом для построения древовидной структуры компонентов в Carbon Components Svelte. Он представляет собой отдельный узел дерева, который может содержать другие узлы (дочерние элементы), обеспечивая иерархическое представление данных. Каждый узел управляется через свойства и события, позволяя создавать динамические и интерактивные интерфейсы.
Каждый объект TreeNode имеет следующие основные
свойства:
TreeNode, может быть пустым.true, узел становится
неактивным и недоступным для взаимодействия.Пример создания простого узла:
import { TreeNode } from 'carbon-components-svelte';
let node = {
id: 'node-1',
label: 'Корневой узел',
expanded: true,
selected: false,
children: [
{
id: 'node-1-1',
label: 'Дочерний узел 1',
expanded: false,
selected: false,
children: []
}
]
};
Для работы с вложенными узлами используется рекурсивное отображение.
TreeNode автоматически рендерит дочерние элементы, если
массив children не пуст. Это позволяет строить сложные
иерархические структуры с произвольной глубиной.
Рекурсивное использование может выглядеть так:
{#each nodes as node (node.id)}
{#if node.children.length > 0}
{/if}
{/each}
Ключевой момент — передача дочерних узлов через слот
children, чтобы сохранить структуру дерева.
Раскрытие узла управляется через свойство
expanded. Оно может изменяться программно или через
взаимодействие пользователя. Например, для раскрытия всех узлов:
function expandAll(nodes) {
nodes.forEach(node => {
node.expanded = true;
if (node.children.length > 0) expandAll(node.children);
});
}
Выбор узла определяется свойством
selected. Можно реализовать выделение одного или нескольких
узлов. Пример выделения узла по id:
function selectNodeById(nodes, id) {
nodes.forEach(node => {
node.selected = node.id === id;
if (node.children.length > 0) selectNodeById(node.children, id);
});
}
TreeNode поддерживает следующие события:
Пример использования события выбора:
handleSelect(e.detail)} />
События передают объект узла через detail, что позволяет
легко управлять состоянием дерева.
Узлы можно добавлять или удалять в любое время. Для этого достаточно
модифицировать массив children родительского узла и
обновить состояние Svelte.
Пример добавления дочернего узла:
function addChild(parentNode, childNode) {
parentNode.children.push(childNode);
}
Пример удаления узла по id:
function removeNodeById(nodes, id) {
return nodes.filter(node => {
node.children = removeNodeById(node.children, id);
return node.id !== id;
});
}
expanded.Carbon Components Svelte обеспечивает единый стиль, соответствующий дизайну IBM Carbon, с плавной анимацией раскрытия и высокой отзывчивостью интерфейса.