首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清除销毁时的ViewChildren订阅

清除销毁时的ViewChildren订阅
EN

Stack Overflow用户
提问于 2019-08-09 01:27:16
回答 3查看 476关注 0票数 0

我在Angular 8组件中有以下声明:

代码语言:javascript
复制
@ViewChildren(SelectComponent) selects: QueryList<SelectComponent>;

其中SelectComponent在*ngFor中声明了N次。

为了在有任何编辑时遍历selects数组,我订阅了这些更改:

代码语言:javascript
复制
this.selects.changes.subscribe(list => {
            list.forEach(item => {
                 alert('in forEach');
                // do something
            });
        });

循环运行良好,但问题是,当我关闭并重新打开主组件时,以前的selects显示不会被清除,因为警报显示了几次。

如何在组件关闭时清除/取消订阅这些订阅?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-09 01:32:40

与在OnDestroy钩子中取消订阅清除任何其他订阅的方式相同:

代码语言:javascript
复制
private sub: Subscription;

this.sub = this.selects.changes.subscribe(list => {
        list.forEach(item => {
             alert('in forEach');
            // do something
        });
    });

 ngOnDestroy() { this.sub.unsubscribe(); }
票数 3
EN

Stack Overflow用户

发布于 2019-08-09 01:33:13

在内存中,您可以将订阅存储在组件内的变量中

代码语言:javascript
复制
this.mySubscription = this.selects.changes.subscribe(list => {
            list.forEach(item => {
                 alert('in forEach');
                // do something
            });
        });

然后在组件生命周期的ngOnDestroy部分中取消订阅

代码语言:javascript
复制
public ngOnDestroy(): void {
    this.mySubscription.unsubscribe();
}
票数 1
EN

Stack Overflow用户

发布于 2019-08-09 01:32:52

尝试将NgOnDestroy方法添加到您的component - https://angular.io/api/core/OnDestroy中,添加应该在重新加载时清除所有先前订阅的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57417902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档