使用例:トースト通知サービスToastService
を作成しています。私は新しいトーストを作るためにこのサービスをコンポーネントに注入したいと思っています。Angular2:サービスからDynamicComponentLoaderを使用する
私は、単一の通知表しToast
コンポーネント作成しました:
@Component({
selector: 'toast',
template: `<div>This is a notification</div>`
})
export class Toast {}
そして、私は私のコンポーネントの1からトーストを表示するtoastService.show(myMessage);
を呼び出すことができるようにしたいです。
これまでのところ、私のToastService
は次のようになります。
@Injectable()
export class ToastService{
constructor(private loader: DynamicComponentLoader) {}
show(message: string) {
this.loader.loadNextToLocation(
Toast,
/* location: ElementRef - how do I get one? I want to load it into the body */
)
.then((ref: ComponentRef) => {
console.log('loaded toast!');
});
}
}
私は理想的には、アプリケーションの残りの要素の上に常にあることを確認するために、body
要素の子としてトーストをロードしたいと思います。
これはどのように可能ですか?それとも良い方法がありますか?私は彼らがangular2 material repoでそれをやる方法を見つけ出そうとしましたが、理解するのは難しいです。
ありがとう - これは私が試みていると思うようなものです。見栄えは良いですが、プライベートAPIの使用について懸念しています。 –
そしてこの非常に理由のために、角モダールはこの警告を持っています:)あなたもTODOを持つことができます。 – Chandermani
実際には、いくつかのグローバル変数にルートコンポーネントリファレンスを格納し、そのリファレンスを使用できるもう1つのハックがあります。 DIは関与していません。 – Chandermani