100

ActivatedRouteObservables が好きparamsurl、購読されているが購読解除されていない多くの例を見つけました。

constructor(private route: ActivatedRoute) {}

ngOnInit() {
  this.route.params
    // (+) converts string 'id' to a number
    .switchMap((params: Params) => this.service.getHero(+params['id']))
    .subscribe((hero: Hero) => this.hero = hero);
}
  • ルート オブジェクトとサブスクリプションは自動的に破棄され、コンポーネントが作成されるたびに新しく作成されますか?
  • それらの s からの登録解除について気にする必要がありObservableますか?
  • そうでない場合は、 の ActivatedRoute オブジェクトのツリーで何が起こるか説明できますかRouterrouterState?
4

5 に答える 5

199

ドキュメントから

コンポーネントのオブザーバブルをサブスクライブする場合、ほとんどの場合、コンポーネントが破棄されたときにサブスクライブを解除するように手配します。

これが必要ないいくつかの例外的なオブザーバブルがあります。ActivatedRoute オブザーバブルは例外です。

ActivatedRoute とそのオブザーバブルは、ルーター自体から隔離されています。Router はルーティングされたコンポーネントが不要になったときにそれを破棄し、注入された ActivatedRoute も一緒に終了します。

とにかく気軽に登録解除してください。これは無害であり、決して悪い習慣ではありません。

于 2016-12-28T09:32:04.157 に答える
7

ルーターが別のルートに移動すると、コンポーネントは破棄され、routerState は参照されなくなります。これにより、オブザーバブルを含むガベージ コレクションを自由に取得できるようになります。

このコンポーネントへの参照を他のコンポーネントまたはサービスに渡す場合、コンポーネントはガベージ コレクションされず、サブスクリプションはアクティブなままになりますが、ナビゲートするときに監視対象がルーターによって完了することは (確認せずに) 確信しています。サブスクリプションがキャンセルされます。

于 2016-12-27T10:35:08.923 に答える