PrimeNG Treetable программно расширяет все узлы, не работающие - PullRequest
1 голос
/ 09 июля 2020

Я пытаюсь рекурсивно расширить все узлы в компоненте Primeng TreeTable, но безуспешно. Значки строк меняются, и больше ничего не происходит, за исключением случаев, когда я вручную нажимаю на значок развертывания / свертывания, и все узлы соответственно расширяются / свертываются.

Здесь ссылка на stackbliz для того, что я пытаюсь сделать, Код Stackblitz

И это мои методы раскрытия / свертывания:

public expandAll(): void {
    this.files1.forEach(node => {
        this.expandCollapseRecursive(node, true);
    });
}

public collapseAll(): void {
    this.files1.forEach(node => {
        this.expandCollapseRecursive(node, false);
    });
}

private expandCollapseRecursive(node: TreeNode, isExpand: boolean): void {
    node.expanded = isExpand;
    if (node.children) {
        node.children.forEach(childNode => {
            this.expandCollapseRecursive(childNode, isExpand);
        });
    }
}

1 Ответ

0 голосов
/ 17 июля 2020

Я нашел решение, которое работает для меня, используя Loda sh cloneDeep , делая глубокий клон из массива TreeNode, а затем выполняя все изменения в клонированном массиве перед перезаписью "this.files1", то все работает.

public expandAll(): void {
    const temp = cloneDeep(this.files1);
    temp.forEach(node => {
        this.expandCollapseRecursive(node, true);
    });
    this.files1 = temp;
}

public collapseAll(): void {
    const temp = cloneDeep(this.files1);
    temp.forEach(node => {
        this.expandCollapseRecursive(node, false);
    });
    this.files1 = temp;
}

private expandCollapseRecursive(node: TreeNode, isExpand: boolean): void {
    node.expanded = isExpand;
    if (node.children) {
        node.children.forEach(childNode => {
            this.expandCollapseRecursive(childNode, isExpand);
        });
    }
}

А есть ли лучший ответ?

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