2017-04-24 2 views
1

Ich muss auf ein Ereignis aus einem Array von Tab-Komponenten warten. Diese Registerkarten geben "onMinimized" aus. Ich möchte diese Ereignisse jedoch in einer Codezeile verknüpfen, anstatt (onMinimized)="hide" für jeden Tab-Komponenteneintrag in der Vorlage einzugeben. Es gibt ein Array von ContentChildren, die ich durchschleifen kann.Wie höre ich ein ContentChild-Ereignis an, ohne mich über eine Vorlage anzumelden?

Ich möchte etwas ähnliches zu tun hat, folgt in der Mutter:

@ContentChildren(TabComponent) tabs: QueryList<TabComponent>; 

... 

ngAfterContentInit() { 
    this.tabs.map((t: TabComponent) => { 
    t.addEventListener("onMinimized", this.hide); 
    }); 
} 

hide() { 
    // hide tabs 
} 

Gedanken?

+0

Ist onMinimized ein benutzerdefinierter Ereignisemitter? Denn dann kannst du es im Code abonnieren. eine frage though - da tabs ein array ist, durchwühlst du nicht dieses array um die tabComponents zu erstellen? oder erstellen Sie die Registerkarten anders? – snorkpete

+0

Jede Registerkarte ist in der Vorlage definiert (obwohl sie in einem Array sein könnte, nehme ich an). Wie erstelle ich einen Ereignis-Listener für eine eckige "Ausgabe" eines ContentChild über eine ContentChild-Referenz? – ktamlyn

+0

Gefunden, aber es ist nicht genau das, was ich suche. http://stackoverflow.com/questions/37746058/what-is-the-best-way-to-detect-focus-event-in-contentchild-in-angular2 – ktamlyn

Antwort

0

Nach etwas Versuch und Irrtum herausgefunden.

ngAfterContentInit() { 
    this.tabs.map((t: TabComponent) => { 
     t.minimizeTab.subscribe(() => { this.hide(); }) 
    }); 
    } 

Die Art und Weise, das Problem zu nähern, war zu berücksichtigen, dass die Komponente eine Eigenschaft hatte, die eine EventEmitter (wie alle Winkel Ausgänge) war. EventEmitter sind Observables, sodass Sie einfach den Stream von Ereignissen abonnieren können.

Verwandte Themen