1
私は、angle2コンポーネントで非同期パイプを使用し、observableを渡しているケースがあります。それはうまく動作します。Angular2 Async Pipeのサブスクリプションを変更する
コンポーネントはまだ生きています。つまり、OnDestroyは呼び出されていないため(非同期パイプが登録されています)、そのオブザーバブルからの登録を解除し、別のコンポーネントに登録します。
どうすればこの問題を解決できますか?ここで
はこのケースを露出させるためにいくつかの擬似コードです:
@Component({
selector: 'pack',
template: `
<wolf *ngFor="let wolf of pack | async">
...
</wolf>
`
})
export class PackComponent implements DoCheck {
pack;
constructor(){
this.pack = Observable.of(northwesthernWolves: Wolf[])
}
onDoCheck() {
if(some condition) {
this.pack = Observable.of(redWolves: Wolf[])
}
}
}
これは答えません。コンポーネントクラス内の非同期サブスクリプションを変更する必要があります。これらのメソッドは、非同期パイプクラス内で宣言され、実行されます。 – Francisco
答えのポイントは、これについて気にする必要はないということです。フレームワークは 'this.pack = Observable.of(redWolves:Wolf [])'を実行するときにこれを行います。手動で購読を解除する必要があると思われたのは何でしたか?投稿したコードに関連する問題がありますか? – estus
私はそれを行うと、ブラウザがブロックされます。コンポーネントクラスのサブスクリプションを変更する必要がある場合があります。私は詳細を述べます:私の最初のサブスクリプションはSSEイベントですが、私はまた、(両方のサーバーに)約束のコールバックを実行します。 SSEventsのストリームは正常に動作しますが、コールバックが呼び出されると、パイプサブスクリプションをプロミス(配列)の戻り値にリセットします。私はそれをするために退会しなければならないかもしれないと信じますが、わかりません。 – Francisco