关于依赖注入的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
我没有意识到导入的模块提供商会自动成为导入模块的提供者。
答案 0 :(得分:1)
ReactiveFormsModule
提供FormBuilder Service
。因此,当您在模块中imports: [ReactiveFormsModule]
时,您也提供了FormBuilder
。
FormBuilder
是ReactiveFormsModule
的一项功能。它就像您添加到应用程序中的任何其他模块一样。另一个可以看到此行为的是由MatDialog
提供的MatDialogModule
服务。
这是Angular使用的模块模式。我们将modules
用作GROUP FEATURES(service, pipe, directive, routes and components
)及其依赖项。
他们说docs:
NgModules配置注入器和编译器,并帮助组织相关的事情。
正如用户所指出的那样:&#34;导入模块的提供商自动成为导入模块的提供者。&#34;