2017-04-24 8 views
1

タブコンポーネントの配列からイベントをリッスンする必要があります。これらのタブは「onMinimized」を生成しますが、テンプレート内の各タブコンポーネントのエントリに(onMinimized)="hide"と入力するのではなく、1行のコードでこれらのイベントに接続します。私がループできるContentChildrenの配列があります。テンプレートを使用しないでContentChildイベントを聞くにはどうすればよいですか?

は私が似た何かをしたいと親には以下があります。

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

... 

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

hide() { 
    // hide tabs 
} 

思考?

+0

onMinimizedはカスタムイベントエミッタですか?あなたはコードでそれを購読することができます。しかし、質問は - タブは配列なので、その配列をループしてTabComponentsを作成していませんか?または別の方法でタブを作成していますか? – snorkpete

+0

各タブはテンプレート内に定義されています(ただし、それらは私が想定している配列内にあります)。 ContentChildリファレンスを使用してContentChildの角の「出力」にイベントリスナーを作成するにはどうすればよいですか? – ktamlyn

+0

これが見つかりましたが、正確には私が探しているものではありません。 http://stackoverflow.com/questions/37746058/what-is-the-best-way-to-detect-focus-event-in-contentchild-in-angular2 – ktamlyn

答えて

0

いくつかの試行錯誤の後でそれを解説します。

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

この問題にアプローチする方法は、コンポーネントが(すべての角度出力と同じように)EventEmitterであるプロパティを持っていると考えることでした。 EventEmittersはオブザーバブルなので、イベントのストリームに簡単に登録することができます。

関連する問題