Ich dachte, ich stecke auch meine zwei Cent ein. Ich benutze dieses Muster:
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs/Subscription';
@Component({
selector: 'my-component',
templateUrl: 'my.component.html'
})
export class MyComponent implements OnInit, OnDestroy {
private subscriptions: Array<Subscription> = [];
public ngOnInit(): void {
this.subscriptions.push(this.someService.change.subscribe(() => {
[...]
}));
this.subscriptions.push(this.someOtherService.select.subscribe(() => {
[...]
}));
}
public ngOnDestroy(): void {
this.subscriptions.forEach((subscription: Subscription) => {
subscription.unsubscribe();
});
}
}
BEARBEITEN
Ich habe neulich die Dokumentation gelesen und ein empfohleneres Muster gefunden:
ReactiveX / RxJS / Abonnement
Vorteile:
Es verwaltet die neuen Abonnements intern und fügt einige ordentliche Überprüfungen hinzu. Würde diese Methode in der Funktion bevorzugen :).
Nachteile:
Es ist nicht 100% klar, wie der Codefluss aussieht und wie Abonnements betroffen sind. Es ist auch nicht klar (nur anhand des Codes), wie es mit geschlossenen Abonnements umgeht und ob alle Abonnements geschlossen werden, wenn das Abbestellen aufgerufen wird.
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs/Subscription';
@Component({
selector: 'my-component',
templateUrl: 'my.component.html'
})
export class MyComponent implements OnInit, OnDestroy {
private subscription: Subscription = new Subscription();
public ngOnInit(): void {
this.subscription.add(this.someService.change.subscribe(() => {
[...]
}));
this.subscription.add(this.someOtherService.select.subscribe(() => {
[...]
}));
}
public ngOnDestroy(): void {
this.subscription.unsubscribe();
}
}