Как обновить mat-tree для обработки добавления дочерних узлов в конечные узлы (преобразование конечных узлов в родительские) - PullRequest
0 голосов
/ 29 мая 2018

Я использую Angular Material6 Tree, компонент с флажками.

В Исходном примере Мы можем только добавить нового дочернего элемента в родительский узел.Что делать, если я хочу добавить нового потомка в листовой узел .

1 Ответ

0 голосов
/ 07 июня 2018

Я решил эту проблему, добавив несколько строк в функции insertItem и addNewItem. Вилка со стеком

     addNewItem(node: TodoItemFlatNode) {
        const parentNode = this.flatNodeMap.get(node);
        /*** this block will be used to determine wither we should expand the subtree or not.      **/ 
        let isParentHasChildren: boolean = false;
        if (parentNode.children)
          isParentHasChildren = true;
        /** end of the block **/
        this.database.insertItem(parentNode!, '');
        // expand the subtree only if the parent has children (parent is not a leaf node)
        if (isParentHasChildren)
          this.treeControl.expand(node);
      }

      insertItem(parent: TodoItemNode, name: string) {
        const child = <TodoItemNode>{ item: name };
        if (parent.children) { // parent already has children
          parent.children.push(child);
          this.dataChange.next(this.data);
        }
        else { // if parent is a leaf node
          parent.children = [];
          parent.children.push(child);
          this.dataChange.next(this.data);
        }
      }
...