【问题标题】:manual TypeScript Angular dependency injection failing on ChangeDetectorRef手动 TypeScript Angular 依赖注入在 ChangeDetectorRef 上失败
【发布时间】: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


【解决方案1】:

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

https://github.com/angular/angular/issues/14656

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

【讨论】:

    猜你喜欢
    • 2015-08-28
    • 2017-09-16
    • 2012-08-13
    • 2017-09-24
    • 1970-01-01
    • 2018-06-04
    • 2020-02-13
    • 2016-07-19
    • 2018-11-01
    相关资源
    最近更新 更多