代码之家  ›  专栏  ›  技术社区  ›  Reactgular

是否必须取消订阅组件中的查询列表?

  •  5
  • Reactgular  · 技术社区  · 7 年前

    当使用 @ContentChildren @ViewChildren 用于侦听对DOM元素的更改的装饰器。我必须取消订阅 QueryList ?

    例如:

    @Component({...})
    export class ParentComponent implements AfterContentInit {
        @ContentChildren(ChildComponent)
        public children: QueryList<ChildComponent>;
    
        public ngAfterContentInit(): void {
            this.children.changes.subscribe(() => ....);
        }
    }
    

    以上是问题吗?

    更新时间:

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

    我找不到任何文件表明 查询列表 .

    2 回复  |  直到 7 年前
        1
  •  5
  •   kashpatel    7 年前

    您不必取消订阅querylist。它是为你做的。

    请参见此处: https://github.com/angular/angular/blob/7d137d7f8872a6fba72668e32f9baf2c5dcfc48b/packages/core/src/linker/query_list.ts#L115

    一般情况下,我会在部件损坏后,当观察到的仍然存在时取消订阅。适用于大多数情况。

        2
  •  0
  •   CodeCheshire    7 年前

    一般来说,当组件被销毁时,最好取消订阅已订阅的内容。在角度上,你可以用你的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();
        }
    }
    
    推荐文章