2016-08-17 3 views
0

ルートサブスクリプションの完了を検出するにはどうすればよいですか?私はangular2を使用してい

this.route.params.subscribe(params => { 
    //do stuff with params 
}) 

私はRxJS docsを見て、それが完了コールバックを追加するのは可能と言う:

this.route.params.subscribe(params => { 
    // do stuff with params 
}, (err) => { throw err;},() => { 
    console.log('Completed!'); 
}); 

しかし、この補完が解雇されることはありません。 Angular2の使用はObservablesで標準と異なるのですか?

答えて

1

ActivatedRoute observablesの仕組みには何も特別なものはありません。完了状態をどのように検出するかは正しいです。しかし完成はおそらく決して起こらない。 Observableがobserver.complete()を実行するときに完了コールバックが呼び出されます。これは、一定量のデータを送信する(配列を反復する、または他のソースから応答を返す)ときに発生します。しかし、経路パラメータに関するObservableは不確定です。つまり、コンポーネントの寿命にわたって発生する可能性のあるパラメータの変更をリッスンすることです(同じコンポーネントを使用して、異なるパラメータ値を生成するのにかかる時間を節約できますコンポーネント)。これらの変更はユーザーやアプリの他の部分から来る可能性があるため、Observableはコンポーネントの存続期間を長くし、完了したコールバックは発生しません。このため、ngOnDesctroy()メソッドでObservableからの登録を解除する必要があります(メモリリークによるホットObservableのハングアップ防止)。

+0

これはコメントであり、回答ではありません。 – dopatraman

+0

また、ルートが変更されたため完了しました... – dopatraman

+0

@doatraman私は同意しますが、私の担当者が上がるまで他の人の投稿にコメントすることはできません。 –

関連する問題