您是否必须取消订阅组件中的QueryList?

Rea*_*lar 7 observable rxjs angular

使用@ContentChildren@ViewChildren装饰器侦听DOM元素的更改时。我需要退订QueryList吗?

例如:

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

    public ngAfterContentInit(): void {
        this.children.changes.subscribe(() => ....);
    }
}
Run Code Online (Sandbox Code Playgroud)

上面有问题吗?

更新:

我要问的原因是我们不必取消订阅@Output装饰器。这些组件在销毁后会自动取消订阅。

我找不到任何说明与相同的文档QueryList

小智 6

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

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

通常,我取消订阅Observable在组件销毁后仍然有效的时间。适用于大多数情况。

  • [这个 stackblitz](https://stackblitz.com/edit/angular-simple-dropdown-hvvraw) 显示当组件被销毁时它会自动关闭。 (3认同)