tl;dr: Basically I want to marry Angular's ngOnDestroy with the Rxjs takeUntil() operator. -- is that possible?
I have an Angular component that opens several Rxjs subscriptions. These need to be closed when the component is destroyed.
A simple solution for this would be:
class myComponent {
  private subscriptionA;
  private subscriptionB;
  private subscriptionC;
  constructor(
    private serviceA: ServiceA,
    private serviceB: ServiceB,
    private serviceC: ServiceC) {}
  ngOnInit() {
    this.subscriptionA = this.serviceA.subscribe(...);
    this.subscriptionB = this.serviceB.subscribe(...);
    this.subscriptionC = this.serviceC.subscribe(...);
  }
  ngOnDestroy() {
    this.subscriptionA.unsubscribe();
    this.subscriptionB.unsubscribe();
    this.subscriptionC.unsubscribe();
  }
}
This works, but it's a bit redundant. I especially don't like that
- The unsubscribe() is somewhere else, so you gotta remember that these are linked.
- The component state is polluted with the subscription.
I would much prefer using the takeUntil() operator or something similar, to make it look like this:
class myComponent {
  constructor(
    private serviceA: ServiceA,
    private serviceB: ServiceB,
    private serviceC: ServiceC) {}
  ngOnInit() {
    const destroy = Observable.fromEvent(???).first();
    this.subscriptionA = this.serviceA.subscribe(...).takeUntil(destroy);
    this.subscriptionB = this.serviceB.subscribe(...).takeUntil(destroy);
    this.subscriptionC = this.serviceC.subscribe(...).takeUntil(destroy);
  }
}
Is there a destroy event or something similar that would let me use takeUntil() or another way to simplify the component architecture like that?
I realize I could create an event myself in the constructor or something that gets triggered within ngOnDestroy() but that would in the end not make things that much simpler to read.
 
     
     
     
     
     
     
     
     
     
     
     
    