コンポーネントポータルを使用してAngularマテリアルCDKオーバーレイをインスタンス化するサービスを使用しています。
ポータルを作成してオーバーレイにアタッチしたら、ポータルが作成するコンポーネントのコンポーネント参照にアクセスする方法はありますか?そのコンポーネントのイベントを外部から聴けるようにしたいと思います。例えば:
const portal = new ComponentPortal(MyCoolComponent, /* ...etc */);
this.overlay.attach(portal);
// I'd like to be able to do something like...
// portal.MyCoolComponent.someEventEmitter.subscribe();
ドキュメントとソースを精査しましたが、それを行う方法が見つかりません。サービスからのコールバックをコンポーネントに挿入する必要があるかもしれませんが、これは非常に面倒です。
誰かがこれを行う方法を知っていますか?
OverlayRef.attach
メソッドはComponentRef
を返します。 ComponentRef
には、コンポーネントのインスタンスであるプロパティinstance
があります。 ComponentRef
は汎用である可能性があるため、内部コンポーネントのタイプがわかります。
OverlayRef
ソースコード の60行目を参照してください。
attach<T>(portal: ComponentPortal<T>): ComponentRef<T>;
だからあなたはあなたのコードでそれを行うことができます
const portal = new ComponentPortal(MyCoolComponent, ...etc);
const compRef: ComponentRef<MyCoolComponent> = this.overlay.attach(portal);
compRef.instance.someEventEmitter.subscribe();