Как получить путь узла из root Angular mat-tree - PullRequest
0 голосов
/ 17 февраля 2020

Мне нужно получить путь от данного узла до root во вложенном Angular вложенном Mat-Tree.

Желательно, начиная с root, пока я не доберусь до выбранного узла. Обратите внимание, что выбранный узел может повторяться в нескольких листьях дерева (с тем же именем узла).

Ответ может выглядеть как двумерный массив, в котором первое измерение - это массив путей, а измерение секунд - это массив, содержащий узлы в пути.

Мне не очень удобны рекурсивные функции, может кто-нибудь помочь мне разобраться с этим?

Пример структуры дерева из Angular .io можно найти на stackblitz . Просто представьте, что фрукты или овощи в этом примере могут повторяться в нескольких категориях.

РЕДАКТИРОВАТЬ1: разъяснение, больше контекста, добавлен пример ссылки

1 Ответ

1 голос
/ 17 февраля 2020

Если вы используете вложенное дерево, вы можете взглянуть на пример, приведенный в разделе mat-tree в документации. Что такое: Дерево с флажками из примеров

Теперь перейдем к вашему запросу. Вы можете использовать angular структуру карты, как в приведенной выше ссылке. Flatmap или NestedMap, которые могут помочь вам получить родительский узел от дочернего или наоборот. Данный код довольно сложен, но с ним стоит поэкспериментировать.

Пример:

// This gets the level of node.
_getLevel = (node: ItemFlatNode) => node.level;

Если вы хотите получить родительский узел:

  /**
   * Gets Parent node in form of ItemFlatNode
   */
  getParentNode(node: ItemFlatNode): ItemFlatNode | null {
    const currentLevel = this.
    _getLevel (node);

    if (currentLevel < 1) {
      return null;
    }

    const startIndex = this.treeControl.dataNodes.indexOf(node) - 1;

    for (let i = startIndex; i >= 0; i--) {
      const currentNode = this.treeControl.dataNodes[i];

      if (this._getLevel (currentNode) < currentLevel) {
        return currentNode;
      }
    }
    return null;
  }

Есть несколько встроенные функции уже даны. Но вам, возможно, придется изменить их в соответствии с вашими требованиями. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...