Açısal ve RxJ'ler konusundaki anlayışımdan Gözlemcileri sonlandırmak için iki yol vardır. Onlardan unsubscribe()
yapabilir veya takeUntil()
ve complete()
'u kullanabilirsiniz. Aşağıda her yaklaşımın örnekleridir (sözde kodda).Açısal - Gözlemleri sonlandırmak için tercih edilen yol nedir?
abonelikten() yaklaşımı
private _id: number;
private _subscriptions: Subscription[] = [];
constructor(private _route: ActivatedRoute) {
this._getId();
}
public ngOnDestroy(): void {
this._subscriptions.forEach(
subscription => subscription.unsubscribe()
);
}
private _getId(): void {
this._subscriptions.push(
this._route.params.subscribe(params => this._id = +params['id'])
);
}
takeUntil() ve tam() yaklaşımı Açısal olarak
private _id: number;
private _ngUnsubscribe: Subject<void> = new Subject<void>();
constructor(private _route: ActivatedRoute) {
this._getId();
}
public ngOnDestroy(): void {
this._ngUnsubscribe.next();
this._ngUnsubscribe.complete();
}
private _getId(): void {
this._route.params.takeUntil(this._ngUnsubscribe).subscribe(
params => this._id = +params['id']
);
}
, gözlenebilirler sonlandırmak için tercih edilen bir yol var?
tercih edilen bir yol yapıyorsun ngOnDestroy', 'içindedir. Ekleyebileceğim tek şey, değerlerin "doğruluk" değil, null ya da undefined olmamasıdır, aksi takdirde "abonelikten çık()" demeye çalışmak için bir hata alırsınız. – Lansana
Ve sık sık örnekte yönlendirici parametreleri gibi ortak gözlenebilirleri sonlandırmanıza gerek olmadığını unutmayın. Açısal onları otomatik olarak sonlandırır. Dokümanların bu bölümünün altındaki notlara bakın: https://angular.io/guide/router#activatedroute-the-one-stop-shop-for-route-information – DeborahK
[bu cevap] 'a bakın (https://stackoverflow.com/a/41177163/2545680) –