【发布时间】:2019-03-05 06:09:46
【问题描述】:
在我的 Angular 应用程序中,我实现了 blog 中描述的 TypeScript 子类的手动依赖注入方法。目标是消除必须将提供程序注入子类只是为了将它们传递给父类。当时效果很好。
后来,当我在第二个 Angular 模块中使用它时,它失败了。搜索发现以前的方法可能(应该?)在 Angular 7 中已经失效(参见this question),但第一个用例继续起作用。
我将其范围缩小到失败的特定注入:ChangeDetectorRef (CDR)。如果我将每个尝试的手动注入包装在 try/catch 中,就像在构造函数中指定的那样注入 CDR 之后的那些。
CDR 有什么不同或特别之处吗?我无法提供它,因为它来自 Angular。是否必须将其与子类联系起来?
最终,我想知道是否有某种方法可以使其与手动注入系统一起使用,或者它是否必须保留为每个子类的自动注入。
附录:
具体错误是
StaticInjectorError(AppModule)[ChildComponent -> ChangeDetectorRef]:
StaticInjectorError(Platform: core)[ChildComponent -> ChangeDetectorRef]:
NullInjectorError: No provider for ChangeDetectorRef!
【问题讨论】:
-
我认为您仍然可以将其添加到 AppModule 中的 providers 数组中。如果你想在组件 ts 文件中使用 DatePipe 之类的东西,你肯定需要这样做
-
@bgraham,我认为这已经奏效了。我刚刚从
@angular/core导入它并将其添加到应用程序模块的providers列表中。请发布答案,以便我给你信用。 -
从头开始。我得到一个空的
Object用于 CDR 注入。
标签: angular typescript dependency-injection