2016-10-14 12 views
3

ViewContainerRef.createComponent()メソッドを使用してapp.component.tsメソッド内で動的にコンポーネントを作成しています。これはComponentRefオブジェクトを返します。動的に作成されたコンポーネントへのイベントバインディングの追加

let newComponent:ComponentRef<any> = this.filtersSection.createComponent(MyDateRangeComponent); 

それはonDateRangeChangeイベントをリスンし、app.component.tsコンポーネント内で定義dateRangeChanged(event)方法を実行するように動的にこのコンポーネントにイベントリスナーを追加する必要があります。

私はもともとこのようapp.component.htmlの内側に、このコンポーネントを使用:

<my-daterange (onDateRangeChange)="dateRangeChanged($event)"></my-daterange> 

私は、これはRendererクラスを使用して達成することができたが、私はこの作業を行うことができなかったことを発見しました

this.renderer.listen(newComponent, 'click', (event) => { 
    // Do something with 'event' 
    console.log(event); 
}); 

これについての助力は本当に感謝しています。 ComponentRef.instanceを使用して

答えて

6

あなたはコンポーネントのインスタンスにアクセスすることを可能にし、これであなたはEventEmitterを購読することができます。

newComponent.instance.onDataRateChange.subscribe(evt => this.result = evt); 
+0

私は、インスタンス上でクリックリスナーを追加するにはどうすればよいですか? – Rajiv

+1

動的コンポーネント内の 'newComponent.location.nativeElement.addEventListener( 'click'、myClickHandler.bind(this))'または '@Hostlistener( 'click')myClickHandler(){...} –

関連する問題