Tôi nghĩ tôi cũng đã bỏ vào hai xu. Tôi sử dụng mẫu này:
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();
});
}
}
BIÊN TẬP
Tôi đã đọc tài liệu một ngày nọ và tìm thấy một mô hình được khuyến nghị hơn:
ReactiveX / RxJS / Đăng ký
Ưu điểm:
Nó quản lý các đăng ký mới trong nội bộ và thêm một số kiểm tra gọn gàng. Thích phương pháp này trong tính năng :).
Nhược điểm:
Không rõ ràng 100% quy trình mã là gì và đăng ký bị ảnh hưởng như thế nào. Cũng không rõ ràng (chỉ bằng cách nhìn vào mã) nó xử lý như thế nào với các đăng ký đã đóng và nếu tất cả các đăng ký sẽ bị đóng nếu hủy đăng ký được gọi.
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();
}
}