手动TypeScript Angular依赖项注入在ChangeDetectorRef上失败

时间:2019-02-28 19:27:50

标签: angular typescript dependency-injection

在Angular应用程序中,我已经实现了对此blog中所述的TypeScript子类进行手动依赖注入的方法。目的是消除将提供程序注入子类的麻烦,而不必将它们传递给父类。当时效果很好。

有时,当我在另一个Angular模块中使用它时,它失败了。搜索发现,以前的方法可能(应该?)在Angular 7中已损坏(请参阅this question),但第一个用例继续起作用。

我将其范围缩小到失败的特定注入:ChangeDetectorRef(CDR)。如果我将每一次尝试都包装起来,则手动注入尝试/捕获注入CDR之后的尝试,就像在构造函数中指定的那样。

关于CDR,有什么不同或特别之处吗?我无法提供它,因为它来自Angular。是否有必要将其绑定到子类?

最终,我想知道是否有某种方法可以使其与手动注射系统一起使用,或者是否必须保留每个子类的自动注射功能。

附录:

具体错误是

StaticInjectorError(AppModule)[ChildComponent -> ChangeDetectorRef]:
  StaticInjectorError(Platform: core)[ChildComponent -> ChangeDetectorRef]:
    NullInjectorError: No provider for ChangeDetectorRef!

1 个答案:

答案 0 :(得分:0)

由于未记录的原因,无法以这种方式手动注入ChangeDetectorRef(以及ElementRefViewContainerRefTemplateRef)。

请参见https://github.com/angular/angular/issues/14656

ChangeDetectorRef必须保持注入子类中并传递给super()