我了解,销毁组件时必须取消订阅某些Observable(即具有无限值的Observable),以防止内存泄漏。我不需要对有限可观察对象执行此操作,因为它们将自动完成unsubscribe

但是,如果我在组件中创建了无限 Observable(例如FormGroup.valueChangesQueryList.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)
        );
    }
}

在这里,我不是unsubscribethis.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/

10-11 23:50