2016-09-26 3 views
1

У меня есть рекурсивный компонент дерева, и я хотел бы расширить все узлы при щелчке с родительского компонента, как я могу это сделать? Подробнее в plunker.Angular2 рекурсивное дерево развернуть все

Plunker

Я говорю об этом методе:

expandAll(){ 
    console.log("expanded all"); 
    } 
+1

Ваш plunker пуст, единственный компонент в нем не является рекурсивным. – Supamiu

+0

Мне очень жаль, попробуйте проверить его сейчас. – ulou

ответ

0

Через некоторое время я предполагаю, что это цифра. Я просто добавил еще @Input() один в TreeComponent:

@Input() expandAll: boolean; 

и заменить *ngIf рекурсивный условие:

[hidden]="(!expanded[i] && !expandAll) || (expanded[i] && expandedAll)" 

Его нужно немного больше работы (рушится все не работает, что, как это должно быть), но это работает что я хотел.

Plnker

0

Просто добавьте expandAll() метод к TreeComponent который расширяет все узлы и вызывает expandAll() на все вложенные TreeComponent компонентов.

Вы можете получить все вложенные TreeComponent компоненты путем добавления

@ViewChildren(TreeComponent) subTrees:QueryList<TreeComponent>; 

и вызвать метод на Чайлдс как

expandAll() { 
    for(var subTree of this.subTrees.toArray()) { 
    subTree.expandAll(); 
    } 
} 
+0

Хорошо, но как я могу вызвать метод компонента приложения из родительского TreeComponent? – ulou

+0

Извините, я не понимаю, что означает ваш комментарий. Насколько я понимаю ваш вопрос, это то, что должен объяснить мой ответ. –

+0

Это то, что вы имели в виду https://plnkr.co/edit/5Q5obfcW1mhsYe9jFXZo?p=preview, не так ли? И как я могу вызвать expandAll компонента родительского дерева из компонента приложения? – ulou

Смежные вопросы