ライフ サイクル中にインスタンスを保存してSubscription
呼び出す必要があるのはいつですか? また、単純にインスタンスを無視できるのはいつですか?unsubscribe()
ngOnDestroy
すべてのサブスクリプションを保存すると、コンポーネント コードに多くの混乱が生じます。
HTTP クライアント ガイドは、次のようなサブスクリプションを無視します。
getHeroes() {
this.heroService.getHeroes()
.subscribe(
heroes => this.heroes = heroes,
error => this.errorMessage = <any>error);
}
同時に、Route & Navigation Guideは次のように述べています。
最終的には、別の場所に移動します。ルーターはこのコンポーネントを DOM から削除して破棄します。そうなる前に、自分たちで後片付けをする必要があります。具体的には、Angular がコンポーネントを破棄する前にサブスクライブを解除する必要があります。そうしないと、メモリ リークが発生する可能性があります。
Observable
メソッド内でサブスクライブを解除しますngOnDestroy
。
private sub: any;
ngOnInit() {
this.sub = this.route.params.subscribe(params => {
let id = +params['id']; // (+) converts string 'id' to a number
this.service.getHero(id).then(hero => this.hero = hero);
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}