2017-07-28 86 views
0

我知道在Angular2中,模块提供的服务可用于其他模块,并且应该只提供一次。如何共享服务 - NgModule - Angular2

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

我看到有两种方式:

  1. 在的AppModule水平
  2. 提供MessengerService在MessengerModule提供MessengerService。在HeaderModule中导入MessengerModule。

1,通过删除它的逻辑服务来“打破”MessengerModule是令人讨厌的。 2,我将失去相当大的MessengerModule的惰性加载功能。由于HeaderModule急于加载,Messenger将会是正确的吗?

看来最好的选择是提供主要的服务。你有哪些建议?

+0

可能重复[如何共享两个模块之间的服务 - @NgModule in angular2?](https://stackoverflow.com/questions/40089316/how-to-share-service-between-two-modules- ngmodule合angular2) – LarsMonty

回答

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中。 这是因为延迟加载的模块已经可以访问在根级定义的 服务。