Từ sự hiểu biết của tôi về Angular và RxJs có hai cách để chấm dứt các Observables. Bạn có thể unsubscribe()
từ họ hoặc sử dụng takeUntil()
và complete()
. Dưới đây là các ví dụ về mỗi cách tiếp cận (trong mã giả).Góc - cách ưu tiên để chấm dứt các Đài quan sát là gì?
Các unsubscribe() phương pháp
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'])
);
}
Các takeUntil() và đầy đủ() phương pháp
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']
);
}
Trong góc, là có một cách ưa thích để chấm dứt quan sát?
Cách thích hợp nhất là trong 'ngOnDestroy', mà bạn đang làm. Điều duy nhất tôi có thể thêm là kiểm tra xem các giá trị có "trung thực" hay không, nghĩa là không null hoặc không được xác định, nếu không bạn sẽ gặp lỗi khi cố gắng gọi 'unsubscribe()'. – Lansana
Và lưu ý rằng bạn thường không cần phải chấm dứt các quan sát phổ biến, chẳng hạn như các thông số bộ định tuyến trong ví dụ của bạn. Góc tự động chấm dứt chúng. Xem ghi chú ở gần cuối phần này của tài liệu: https://angular.io/guide/router#activatedroute-the-one-stop-shop-for-route-information – DeborahK
xem [câu trả lời này] (https://stackoverflow.com/a/41177163/2545680) –