【问题标题】:Shouldn't Angular 4 ReactiveFormsModule use forRoot pattern?Angular 4 ReactiveFormsModule 不应该使用 forRoot 模式吗?
【发布时间】:2018-04-03 05:44:42
【问题描述】:

我在这里阅读了一篇关于 Angular 模块加载的写得很好的文章 - https://medium.com/@cyrilletuzi/understanding-angular-modules-ngmodule-and-their-scopes-81e4ed6f7407

由于功能模块的 NgModule 中的提供程序实际上是全局注入(并且急切地),因此本文讨论了 RouterModule 等模块中使用的“forRoot”模式。

我遇到了 ReactiveFormsModule - https://angular.io/api/forms/ReactiveFormsModule - 它有 FormBuilder 提供程序,但它似乎没有使用 forRoot 模式。这是否意味着每个使用 ReactiveFormsModule 的功能模块最终都会重新创建 FormBuilder 提供程序?我错过了什么吗?

【问题讨论】:

标签: angular dependency-injection angular-reactive-forms


【解决方案1】:

forRoot 仅与延迟加载的模块相关。对于预先加载的模块,提供程序无论如何都会在应用程序根范围内注册。

如果您在延迟加载模块中导入了ReactiveFormsModule,那么每个延迟加载模块都会创建一个FormBuilder 实例。 想想也没关系,因为FormBuilder 没有状态。 所以不是单身对FormBuilder 的工作方式没有影响,因为它没有状态,所以在内存方面也没有影响。

【讨论】:

  • 有道理。如果我理解正确,将 forRoot 添加到 ReactiveFormsModule 也不会影响行为。但是对于具有状态服务的模块,延迟加载可能会产生影响,因为在这种情况下,注入发生在功能模块级别。如果我错了,请纠正我。
  • 如果你想要一个单一的应用程序全局服务实例,它肯定会有所作为。延迟加载的模块引入了一个子范围,它们在其中注册其服务提供者,这导致每个延迟加载的模块实例都有一个服务实例,并且该服务对非延迟加载的模块不可用。
猜你喜欢
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 2021-06-07
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 2020-10-06
相关资源
最近更新 更多