如何共享服务 - NgModule - Angular2

时间:2017-07-28 16:15:58

标签: angular angular-services

我知道在Angular2中,模块提供的服务可供其他模块使用,并且只能提供一次。

我有一个延迟加载的MessengerModule,它导入了一个MessengerService。我还有一个HeaderModule,它只需要这个服务来更新消息通知。

我看到两种方式:

  1. 在AppModule级别提供MessengerService
  2. 在MessengerModule中提供MessengerService。在HeaderModule中导入MessengerModule。
  3. 在1中,通过删除其逻辑服务来“破坏”MessengerModule是令人讨厌的。 在2,我将失去MessengerModule的延迟加载功能,这是非常大的。由于HeaderModule是急切加载的,Messenger也会正确吗?

    似乎最好的选择是在主要层面提供服务。你的建议是什么?

1 个答案:

答案 0 :(得分:1)

您应该阅读this文章。

它涉及: 应用程序/共享/ shared.module.ts

import { NgModule, ModuleWithProviders } from '@angular/core';
import { CounterService } from './counter.service';

@NgModule({})
export class SharedModule {
  static forRoot(): ModuleWithProvider`enter code here`s {
    return {
      ngModule: SharedModule,
      providers: [CounterService]
    };
  }
}

应用程序/ app.module.ts

import { SharedModule } from './shared/shared.module';

@NgModule({
  imports: [
    SharedModule.forRoot(),
    ...
  ],
  ...
})
export class AppModule {}
  

由于SharedModule只包含Angular注册的服务   在根应用程序注入器中,我们不需要在LazyModule中导入它。   这是因为延迟加载的模块已经可以访问   在根级定义的服务。