2017-07-28 88 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中。 這是因爲延遲加載的模塊已經可以訪問在根級定義的 服務。