首页 > 解决方案 > 您是否必须取消订阅组件中的 QueryList?

问题描述

当使用@ContentChildrenor@ViewChildren装饰器来监听 DOM 元素的变化时。我必须取消订阅QueryList吗?

例如:

@Component({...})
export class ParentComponent implements AfterContentInit {
    @ContentChildren(ChildComponent)
    public children: QueryList<ChildComponent>;

    public ngAfterContentInit(): void {
        this.children.changes.subscribe(() => ....);
    }
}

以上会不会有问题?

更新:

我问的原因是我们不必取消订阅@Output装饰器。当组件被销毁时,它们会自动取消订阅。

我找不到任何说明这对于QueryList.

标签: angularrxjsobservable

解决方案


您不必取消订阅 QueryList。它为你做。

见这里: https ://github.com/angular/angular/blob/7d137d7f8872a6fba72668e32f9baf2c5dcfc48b/packages/core/src/linker/query_list.ts#L115

作为一般规则,当 Observable 在组件销毁后仍然存在时,我会取消订阅。适用于大多数场景。


推荐阅读