在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!
答案 0 :(得分:0)
由于未记录的原因,无法以这种方式手动注入ChangeDetectorRef
(以及ElementRef
,ViewContainerRef
和TemplateRef
)。
请参见https://github.com/angular/angular/issues/14656
ChangeDetectorRef
必须保持注入子类中并传递给super()
。