ストアにサブスクライブしてデータを取得するコンポーネントがあります。
this.store.select('somedata').subscribe((state: any) => {
this.somedata = state.data;
});
コンポーネントがなくなったら、このサブスクリプションのサブスクリプションを解除します。他の場所では、次のような観察可能なものをサブスクライブします。
this.service.data.subscribe(
(result: any) => {//data}
);
次のように、ngOnOnDestroyで登録を解除しました。
ngOnDestroy(){
this.service.data.unsubscribe();
}
しかし、私ができない店の場合、それは私にエラーを与えます:
Property 'unsubscribe' does not exist on type 'Store<State>'
購読すると、その上に購読オブジェクトを受け取ります。unsubscribe()を呼び出すことができます
const subscription = this.store.select('somedata').subscribe((state: any) => {
this.somedata = state.data;
});
// later
subscription.unsubscribe();
または
ngOnInit(){
this.someDataSubscription = this.store.select('somedata').subscribe((state: any) => {
this.somedata = state.data;
});
}
ngOnDestroy(){
this.someDataSubscription.unsubscribe();
}
上位の回答よりも優れた方法があります。これは、サブスクリプションの束を1つだけ管理する必要がない方法です。その後、不必要な変数を大量に作成することなく、必要なだけサブスクリプションを作成できます。
public ngDestroyed$ = new Subject();
public ngOnDestroy() {
this.ngDestroyed$.next();
}
public ngOnInit() {
this.myWhateverObs$
.pipe(takeUntil(this.ngDestroyed$))
.subscribe((val)=> { this.whatever()});
this.myWhateverNPlusOne$
.pipe(takeUntil(this.ngDestroyed$))
.subscribe((val)=> { this.whatever()})
}
Subscribeメソッドを直接呼び出すことなく値を取得できます。
@Component({
template: `
<div>Current Count: {{ counter | async }}</div>
`
})
class MyAppComponent {
counter: Observable<number>;
constructor(private store: Store<AppState>){
this.counter = store.select('counter');
}
}
ここでは、値を取得するために非同期パイプを使用しています。非同期パイプはObservableまたはPromiseにサブスクライブし、発行した最新の値を返します。新しい値が発行されると、非同期パイプは変更をチェックするコンポーネントをマークします。コンポーネントが破壊されると、潜在的なメモリリークを回避するために、非同期パイプのサブスクライブが自動的に解除されます。
そもそも購読する必要はありません| async
テンプレートに。ストアから取得したものはすべて観察可能です。angularサブスクリプションを処理します。ここに api