如何在Angular2中的模块加载上实例化单例服务

时间:2016-10-11 09:11:34

标签: angular

我在角度2中有一个服务,它以当前形式只侦听来自自定义调度程序的事件,对它们起作用并通过调度程序发送其他事件。

因此,服务不会注入任何地方,也不是我想要的(稍后会将其注入延迟加载模块的组件中)。

服务位于共享模块中,我将其导出为:

export class SharedModule {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: SharedModule,
      providers: [Dispatcher, AccountService]
    };
  }
}

如何确保在SharedModule加载时实例化它?

1 个答案:

答案 0 :(得分:3)

您可以使用NgModule的构造函数。在此示例中,当我懒惰加载此模块时,我使用它来为UserService实例化replaceReducers()ngrx/store

@NgModule({
  declarations: [],
  imports: [
    CommonModule,
    ...
  ],
  providers: [
    UserService,
    ...
  ],

})
export class LazyModule {
  constructor(
    private userService: UserService,
    private store: Store<any>) {
    console.info(`replaceReducer(${ModuleRootReducer.name})`);
    this.store.replaceReducer(ModuleRootReducer);
  }
}
相关问题