私も2セント入れたと思いました。私はこのパターンを使用します:
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();
});
}
}
編集
先日ドキュメントを読んで、より推奨されるパターンを見つけました。
ReactiveX / RxJS / Subscription
長所:
新しいサブスクリプションを内部で管理し、いくつかのきちんとしたチェックを追加します。機能でこの方法を好むでしょう:)。
短所:
コードフローとは何か、サブスクリプションがどのように影響を受けるかは100%明確ではありません。また、(コードを見るだけで)閉じられたサブスクリプションをどのように処理するか、およびサブスクリプション解除が呼び出された場合にすべてのサブスクリプションが閉じられるかどうかも明確ではありません。
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();
}
}