web-dev-qa-db-ja.com

CDKオーバーレイポータルからコンポーネントへの参照を取得する

コンポーネントポータルを使用して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();

ドキュメントとソースを精査しましたが、それを行う方法が見つかりません。サービスからのコールバックをコンポーネントに挿入する必要があるかもしれませんが、これは非常に面倒です。

誰かがこれを行う方法を知っていますか?

9
dudewad

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();
17
Noémi Salaün