5

我对 Angular2 中的订阅处理有一个高级别的问题。我最近读了很多关于订阅处理不佳如何由于未正确取消订阅而导致代码中的内存泄漏的文章。

@Components 的一个简单解决方案是满足所有订阅并在 ngOnDestroy 生命周期事件中处理它们。

但是,对于不属于 @Component 并且有订阅的控制器,正确取消订阅的最佳方法是什么?目前,我正在考虑让控制器公开订阅或它自己的 onDestroy 方法,但这感觉不像可以轻松/一般地完成,所以我很想听听其他选项/意见。

谢谢!

编辑:澄清这不是服务问题,而只是控制器问题。

4

1 回答 1

0

尽量避免手动订阅

  1. 当您在角度上下文之外时,不要在角度绑定流上使用订阅,这只会导致您陷入混乱的情况。
  2. 尽量避免手动订阅。特别是在组件中!90% 的情况下不需要手动订阅。

为什么?那我该怎么做呢?

在大多数情况下,您的应用程序只需要为当前显示在屏幕上的信息流动数据 -> 让模板通过使用async-管道处理订阅- 在任何控制器中都不需要手动订阅,这都可以通过连接和无需任何手动订阅即可扩展多个 rxjs-streams。

您仍然可以在执行某些数据计算和其他逻辑的角度上下文之外拥有实用程序类,但是将这些方法嵌入流中或让它们扩展现有流,但不要在那里进行任何手动订阅。

无论显示的数据如何,都必须执行永久计算怎么办?

这种情况是否真的存在是有争议的,但假设它确实存在:这是服务的典型案例 -> 在服务中订阅是可以的,因为服务是单例的,因此不会造成内存泄漏的巨大风险。

于 2016-11-26T14:14:41.037 回答