首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >angular2中的管道是否有任何破坏钩子(与组件相同)?

angular2中的管道是否有任何破坏钩子(与组件相同)?
EN

Stack Overflow用户
提问于 2016-06-01 21:10:22
回答 1查看 3.6K关注 0票数 9

经过几天的调查(!)对于当前Angular2应用程序的巨大内存泄漏,我提出了一个新发现:

显然,在整个应用程序中大量使用的异步管道正在订阅一个可观察的管道,但在组件和管道清理时从未发布(未订阅)。

它为一次可以观察到的事件积累了11,000名观察者,很少有用户操作(这最终导致了应用程序崩溃)。

我需要取消可观察到的订阅,为了做到这一点,我需要一个钩子来破坏,类似于ngOnDestroy,但是对于管道。

是否有这样的钩子,如果没有,你建议如何取消订阅?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-01 21:43:58

如果您查看一下异步管道代码,就会发现它们使用ngOnDestroy,就像在指令中那样。

来自AsyncPipe代码的代码片段:

代码语言:javascript
复制
@Pipe({name: 'async', pure: false})
@Injectable()
export class AsyncPipe implements OnDestroy {
  ...

  ngOnDestroy(): void {
    if (isPresent(this._subscription)) {
      this._dispose();
    }
  }
  ...
}

关键是使用:pure:false

来自OnDestroy

要创建有状态管道,您应该实现这个接口,并在PipeMetadata中将纯参数设置为false。 给定相同的输入,有状态管道可能产生不同的输出。有状态管道很可能包含在破坏绑定时应该清理的状态。例如,可能需要释放对数据流的订阅,或者可能需要清除间隔。

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

https://stackoverflow.com/questions/37578834

复制
相关文章

相似问题

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