【发布时间】:2018-08-21 00:04:49
【问题描述】:
关于依赖注入的 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 注册某些东西的唯一方法。这是怎么回事?一些注入的东西怎么可能不需要在providers数组中?
提前致谢。
更新答案
啊!我从提供者页面看到: “当您导入具有提供程序的模块时,这些提供程序也可用于应用程序中的所有类,只要它们具有查找令牌。例如,如果您将 HttpClientModule 导入您的 AppModule,则其提供程序可用于整个应用程序,您可以从应用程序中的任何位置发出 HTTP 请求。” https://angular.io/guide/providers
我没有意识到导入模块的提供者会自动成为导入模块的提供者。
【问题讨论】:
-
看看这个github.com/angular/angular/blob/master/packages/forms/src/…,所以如果你导入 ReactiveFormsModule 你将能够注入 FormBuilder
-
感谢您的评论,但是为什么作为导入的东西的一部分的东西对 DI/注入器可用?我的问题不是“如何让 Reactive Forms 工作”,而是我如何在没有提供者的情况下进行注入?
标签: angular angular-reactive-forms angular-providers