3

关于依赖注入的 Angular 文档让我感到困惑。
我了解 Angular DI 的工作原理是通过传递给 NgModule(对于整个模块)或 Component(对于该组件)的元数据对象上的 providers 数组向 DI(注入器)指定要“提供”的东西。

这个问题并不特定于反应形式,但在反应形式的 angular.io 示例中,它的组件定义为(简化!):

import {FormBuilder, FormGroup, Validators} from '@angular/forms';

@Component({
  template: '<p>Hello world</p>'
})
export class DepInjectionExample
{
     constructor(private formBuilder: FormBuilder)
     {
        //Use form builder here
     }
}

现在这有效(我有一个反应形式工作),但如何?在 Component providers 数组或其包含的 NgModule 提供程序数组中没有 FormBuilder 的“提供程序”。然而,Angular DI 文档坚持提供者数组是为 DI 注册某些东西的唯一方法。这是怎么回事?一些注入的东西怎么可能不需要在提供者数组中?

提前致谢。


更新答案

啊! 我从提供程序页面看到:“当您导入具有提供程序的模块时,这些提供程序也可用于应用程序中的所有类,只要它们具有查找令牌。例如,如果您将 HttpClientModule 导入您的 AppModule,它的然后,整个应用程序都可以使用提供程序,您可以从应用程序的任何位置发出 HTTP 请求。” https://angular.io/guide/providers

我没有意识到导入模块的提供者会自动成为导入模块的提供者。

4

1 回答 1

1

ReactiveFormsModule提供FormBuilder Service. _ 所以,当你imports: [ReactiveFormsModule]在你的模块中时,你也在提供FormBuilder

是的FormBuilder一个特点ReactiveFormsModule。它就像您添加到应用程序中的任何其他模块一样。您可以看到此行为的另一个MatDialog是由 提供的服务MatDialogModule

这是 Angular 使用的模块模式。我们使用modulesGROUP FEATURES 作为 ( service, pipe, directive, routes and components) 及其依赖项。

他们在文档中说:

NgModules 配置注入器和编译器,并帮助将相关的东西组织在一起。

正如用户指出的那样:“导入模块的提供者自动成为导入模块的提供者。”

于 2018-03-12T20:57:01.753 回答