2017-06-21 11 views
0

私はなぜサービスに設定を受け取らないのか分かりませんか?ここで 角度2-4 - 私のモジュールを構成する方法

は私のモジュールScnApiModule

module.ts

@NgModule({ 
    imports: [ 
    CommonModule 
    ], 
    declarations: [], 
    exports: [] 
}) 
export class ScnApiModule { 
    static forRoot(config?: IApiConfig): ModuleWithProviders { 
    console.log('ScnApiModule', config); // here I get the config 

    return { 
     ngModule: ScnApiModule, 
     providers: [ 
     {provide: 'ApiConfig', useValue: config}, 
     RestService, 
... 

マイサービス

rest.service.tsある

@Injectable() 
export class RestService { 
    constructor(@Inject('ApiConfig') config?: IApiConfig) { 
    console.log('RestService', config); // here I get `undefined` 
... 

メインアプリモジュール

app.module.ts

export const CONFIG: IApiConfig = { 
    apiHost: environment.scnApiLibrary.apiHost, 
    authHost: environment.scnApiLibrary.authHost, 
    clientId: environment.scnApiLibrary.clientId, 
    secret: environment.scnApiLibrary.secret, 
}; 

@NgModule({ 
... 
imports: [ 
    ScnApiModule.forRoot(CONFIG) 
] 
... 

私は間違っていますか?どのように私は設定

+0

'ScnApiModule'は' @ NgModule'アノテーションを持っていますか? – PierreDuc

+0

@PierreDucはい。ありがとう、私は例でこれを逃した –

答えて

0

を初期化するために、その後、サービス内の設定を取得します。まず、あなたのIApiConfig注射は、それは任意のサービスによってアクセスすることができる方法またはコンポーネント

@Injectable() 
export class IApiConfig { 
    apiHost:string; 
    authHost:string; 
    clientId:string; 
    secret:string; 

    constructor(init?: Partial<IApiConfig>) { 
     this.apiHost = init.apiHost; 
     ... 
    } 
} 

ScnApiModuleあなたがしようとしているでことを確認します

export const apiConfigToken = new InjectionToken<IApiConfig>('apiConfigToken'); 

export function getapiConfigInjectionToken(config: IApiConfig) { 
    return new IApiConfig(config); 
} 

export const APIConfigProvider = { 
    provide: IApiConfig , 
    useFactory: getapiConfigInjectionToken, 
    deps: [apiConfigToken] 
}; 

の変更をあなたの設定に提供され、その方法を提供する工場を建設する必要が

export class ScnApiModule { 
    static forRoot(config?: IApiConfig): ModuleWithProviders { 

    return { 
     ngModule: ScnApiModule, 
     providers: [ 
     {provide: apiConfigToken, useValue: config}, 
      APIConfigProvider, 
... 

使い方

ScnApiModule.forRoot({apiHost: 123,authHost:456}) 
関連する問題