使用@ContentChildren
或@ViewChildren
装饰器侦听DOM元素的更改时。我是否需要退订QueryList
?
例如:
@Component({...})
export class ParentComponent implements AfterContentInit {
@ContentChildren(ChildComponent)
public children: QueryList<ChildComponent>;
public ngAfterContentInit(): void {
this.children.changes.subscribe(() => ....);
}
}
以上内容是否有问题?
已更新:
我要问的原因是我们不必取消订阅@Output
装饰。这些组件在销毁后会自动取消订阅。
我找不到任何说明QueryList
相同的文档。
答案 0 :(得分:5)
您不必退订QueryList。它为你做。
作为一般规则,当组件销毁后Observable仍然有效时,我将退订。在大多数情况下都可以使用。
答案 1 :(得分:0)
作为一般规则,在组件销毁时,最好退订已订阅的内容。在Angular中,您可以在ngOnDestroy方法中执行此操作。
import { Subscription } from 'rxjs';
@Component({...})
export class ParentComponent implements AfterContentInit, OnDestroy {
@ContentChildren(ChildComponent)
public children: QueryList<ChildComponent>;
private childrenSubscription: Subscription;
public ngAfterContentInit(): void {
this.childrenSubscription = this.children.changes.subscribe(() => ....);
}
public ngOnDestroy(): void {
this.childrenSubscription.unsubscribe();
}
}