我了解,销毁组件时必须取消订阅某些Observable(即具有无限值的Observable),以防止内存泄漏。我不需要对有限可观察对象执行此操作,因为它们将自动完成unsubscribe
。
但是,如果我在组件中创建了无限 Observable
(例如FormGroup.valueChanges
或QueryList.changes
),则此组件将被包含它的组件销毁,因此我认为即使我这样做也不会造成内存泄漏不能退订它。
这是一个简单的示例:
@Component({})
export class DummyComponent {
form: FormGroup;
constructor(private fb: FormBuilder) {
this.form = this.fb.group({
firstName: [''],
lastName: ['']
});
this.form.valueChanges.subscribe(
x => console.log(x)
);
}
}
在这里,我不是
unsubscribe
的this.form.valueChanges
;当我的组件被销毁时,this.form.valueChanges
也将被销毁。在这种情况下会不会发生内存泄漏?
最佳答案
如Babar所述,您需要取消订阅才能停止这些订阅以继续监视更改。
对于您的特殊情况,我认为您有一点。
当我在同一组件中有很多订阅时,我要做的一件事是以下内容。
首先,我创建“订阅”,这是一个空的订阅类型数组。
private subscriptions: Subscription[] = [];
然后,每次我需要订阅时,我都会将其推送到数组中
this.subscriptions.push(this.form.valueChanges.subscribe(x => console.log(x)));
在ngOnDestroy中,我取消订阅数组内的每个订阅。
ngOnDestroy(): void {
this.subscriptions.forEach((elem) => { elem.unsubscribe(); })
}
关于Angular 2/Rxjs : do I really need to unsubscribe?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42694306/