角度依赖注入:提供者与导入

时间:2018-03-12 20:52:16

标签: angular angular-reactive-forms angular-providers

关于依赖注入的Angular文档让我感到困惑 我知道Angular DI的工作原理是指定DI(注入器)的某些东西,然后提供"通过传递给NgModule(对于整个模块)或Component(仅用于该组件)的元数据对象上的providers数组。

这个问题特定于反应形式,但在反应形式的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
     }
}

现在这个工作(我有一个反应形式工作),但是怎么样?没有&#34;提供商&#34;对于FormBuilder,可以是组件提供程序数组,也可以是包含NgModule提供程序数组。然而,Angular DI文档坚持提供者数组是为DI注册内容的唯一方法。发生了什么事?一些注入的东西怎么可能不需要在提供者数组中?

提前致谢。

更新回复

啊!我从提供者页面看到: &#34;当您导入具有提供程序的模块时,只要具有查找标记,这些提供程序也可用于应用程序中的所有类。例如,如果您将HttpClientModule导入AppModule,则其提供程序随后可供整个应用程序使用,您可以从应用程序的任何位置发出HTTP请求。 https://angular.io/guide/providers

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

1 个答案:

答案 0 :(得分:1)

ReactiveFormsModule提供FormBuilder Service。因此,当您在模块中imports: [ReactiveFormsModule]时,您也提供了FormBuilder

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

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

他们说docs

  

NgModules配置注入器和编译器,并帮助组织相关的事情。

正如用户所指出的那样:&#34;导入模块的提供商自动成为导入模块的提供者。&#34;