Von meinem Verständnis von Angular und RxJs gibt es zwei Möglichkeiten, Observables zu beenden. Sie können von ihnen oder takeUntil()
und complete()
verwenden. Im Folgenden finden Sie Beispiele für jeden Ansatz (im Pseudocode).Angular - was ist der bevorzugte Weg, um Observables zu beenden?
Der Abmelde() Ansatz
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'])
);
}
Die takeUntil() und vollständig (Ansatz)
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']
);
}
In Angular, ist es eine bevorzugte Art und Weise Observable zu beenden?
Die bevorzugte Art und Weise in 'ngOnDestroy' ist, was Sie tun. Die einzige Sache, die ich hinzufügen könnte, ist zu überprüfen, dass die Werte "truthy" sind, dh nicht null oder nicht undefiniert, sonst erhalten Sie einen Fehler beim Versuch, 'unsubscribe()' aufzurufen. – Lansana
Und beachten Sie, dass Sie häufige Observablen, wie die Router-Parameter in Ihrem Beispiel, oft nicht beenden müssen. Angular beendet sie automatisch. Siehe die Hinweise unten in diesem Dokumentabschnitt: https://angular.io/guide/router#activedroute-the-one-stop-shop-for-route-information – DeborahK
siehe [diese Antwort] (https://stackoverflow.com/a/41177163/2545680) –