Angular 2 - 作为 NgModule 的服务不必声明所有提供者?

标签 angular angular2-services

我有一个名为 CalculationService 的服务,声明为 @Injectable()。该服务使用了大量其他注入(inject)类,每个类也声明为 @Injectable() 并通过 @Inject() 提供给 CalculationService 的构造函数。

现在,当我想在我的应用程序中使用该服务时,AppComponent 看起来像这样(为了方便起见,我省略了 Typescript 导入):

@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    RouterModule.forRoot(routeConfig),
    PlannerModule
  ],
  providers: [
    InputService,
    Bausparen,
    BausparenInput,
    Girokonto,
    GirokontoInput,
    Immobilien,
    ImmobilienInput,
    Lebensversicherung,
    LebensversicherungInput,
    Rentenversicherung,
    RentenversicherungInput,
    Tagesgeld,
    TagesgeldInput,
    Termingeld,
    TermingeldInput,
    Wertpapiere,
    WertpapiereInput
  ],
  bootstrap: [AppComponent]
})
export class AppModule {
}

我不需要直接访问应用模块中声明的所有提供程序。唯一需要的类是 CalculationService,但我不知道如何在服务中声明提供者。

有没有办法将服务重构为模块,即在 CalculationService 中声明提供者?或者我是否必须摆脱所有的 @Injectable()(Bausparen 等)并在计算服务中创建对象,这样就不需要提供程序了?

最佳答案

您不能在服务上或服务中注册提供商。您只能在模块或组件中注册它们。

你可以做的是为你的服务创建一个模块,然后你只需要将模块添加到 imports: [...] 并且所有提供者都在全局注册。

如果是懒加载模块你需要实现并导入forRoot()

关于Angular 2 - 作为 NgModule 的服务不必声明所有提供者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39344334/

相关文章:

angular - 如何通过单击按钮打开 PrimeNG p 对话框并将数据从组件传递到 p 对话框?

Bower 组件的 Angular2、SystemJS 路径

angularjs - Angular Http - promise 或订阅

javascript - 过滤器不是自定义管道 Angular 2 中的函数

angular - 仅存储 Firebase 存储下载 URL token (而不是完整路径)是否安全?

javascript - 元数据版本不匹配 Angular 4 @ng-bootstrap

angular - 从 *Routed* 子组件访问父 @Component 和变量

angular - 关于angular2提供者的一些问题

node.js - Angular 2 - 通过 Windows 身份验证使用 Restful api 调用

angular - 类型 'Observable<Student[]>' 缺少类型 'Student' : id, 名字、姓氏、英语和其他 4 个属性的以下属性