2017-12-04 11 views
0

EventEmittersを使用してネストされたコンポーネントのチェーンを介してデータ/イベントを渡そうとしています。しかし、私は1つの問題を解決する方法は、これが起こるのを防ぐかもしれないと思う。Angularの埋め込みビューでイベントを購読できますか?

私はコンポーネントの1つに埋め込みビューを作成しているので、テーブル構造を壊さないようにしています。そのコンポーネントの場合、関連するコードは次のとおりです。

@ContentChild(DataTableAddRecordComponent) adder: DataTableAddRecordComponent; 
@ViewChild('dtAdder', { read: ViewContainerRef }) adderContainer: ViewContainerRef; 

ngAfterContentInit(): void { 
    if (this.adder && this.adderContainer) { 
     this.adderContainer.createEmbeddedView(this.adder.templateRef); 
    } 

    } 

ここでは、同じコンポーネントの一部のHTMLを示します。イベントを購読しようとしていることが、実際のコンポーネントの代わりにng-containerであることに注目してください。再びこれは私が<data-table-adder>タグが私のテーブルをねじ込む得ることはありません。しかし、それがテンプレートにないときに、そのコンポーネントからイベントをキャッチするにはどうすればいいですか(または、他に何か不足しているものがありますか)。

+0

「this.adder.templateRef」とは何ですか? –

+0

上記のコードをより詳しく見ると、加算器がcontentchildとして宣言されたコンポーネントに過ぎないことがわかります。 TemplateRefは、これらの埋め込みビューを作成するためのコンポーネントのプロパティです(ビューテンプレートへの参照)。 https://angular.io/api/core/TemplateRef – 333Matt

答えて

0

これは簡単であることが判明しました。コンポーネントへの参照があり、プログラムによって放出イベントを購読することができます。

if (this.adder && this.adderContainer) { 
    this.adderContainer.createEmbeddedView(this.adder.templateRef); 
    this.adder.added.subscribe(data => 
    this.add.emit(data)); 
} 
関連する問題