2017-08-11 93 views
3

您可能都知道,您需要取消订阅观察器以防止内存泄漏@Component的角度@Unsubscribe装饰器

我不明白为什么不只是创造@Uncsubscribe装饰商在您使用观测量组件类,它会经过的所有属性和退订都在破坏预订。

或甚至更多的糖:扩展@组件修饰器添加这样的行为。

现在问题:这个解决方案的缺陷是什么?

+0

_why不只是创建@Uncsubscribe装饰器_ - 如何?你可以表演吗? –

回答

1

实际上,有一篇关于this的好文章。

这里的概述

@AutoUnsubscribe(["one$", "two$"]) 
class TestComponent { 
    ... 
} 

其中一个$和两个$是你的观测,它会自动退订在NgOnDestroy

如果您正在使用AOT,请确保您在添加NgOnDestroy您零件。请参阅this

+0

如果我们没有直接声明它,你确定angular会在aot编译中运行'ngOnDestroy'方法吗? AOT对我们来说一直是个问题。那么有一个'takeUntil'和这样的实现有什么区别。在这两种情况下,我们必须在组件 – yurzui

+0

@yurzui上声明'ngOnDestroy'钩子,谢谢你指出。我收回这个实现没有缺陷。使用AOT可能是此实现的问题。我会进一步调查这个 – brijmcq

+1

这里是它被检查的地方https://github.com/angular/angular/blob/master/packages/compiler/src/aot/static_reflector.ts#L255-L268 – yurzui