2017-04-20 5 views
7

私はangualr2ライブラリyeoman generatorを使用して社内ライブラリを作成しました。ang2ライブラリに環境変数を渡します

いくつかの角度サービスは、現在のアプリケーションで環境変数を使用しています(各envでapiエンドポイントが変更されています)。現在の環境オブジェクトをangular2ライブラリサービスに渡す最善の方法は何ですか?

+0

これについての回答がありましたか?私はまったく同じことをしたい – leopic

答えて

2

あなたが解決策をまだ探している場合は、ここで私があなたが求めていたものと同じように(角度4.2.4を使って)何かを達成したのです。

AppModule(またはライブラリをインポートする場所)にLibraryModuleforRoot()メソッドを呼び出します。この関数の助けを借りて、任意の設定値をライブラリに渡すことができます。あなたのアプリの環境。

import {environment} from "../environments/environment"; 
... 

@NgModule({ 
    declarations: [ 
     AppComponent 
    ], 
    imports: [ 
     BrowserModule, 
     ... 
     LibraryModule.forRoot(environment) 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { 
} 

もちろんあなたLibraryModuleforRoot()方法を提供する必要があります。 プロバイダの配列では、サービスを提供することができます。値はand moreです。この場合、'env'は、簡略化のために、指定された環境オブジェクトを保持するトークンとして機能します。代わりにInjectionTokenを使用することもできます。トークンenv以来

@NgModule({ 
    ... 
}) 
export class LibraryModule { 

    public static forRoot(environment: any): ModuleWithProviders { 

     return { 
      ngModule: LibraryModule, 
      providers: [ 
       ImageService, 
       { 
        provide: 'env', // you can also use InjectionToken 
        useValue: environment 
       } 
      ] 
     }; 
    } 
} 

が今、あなたの LibraryModuleによって提供され、あなたはその子のサービスやコンポーネントのすべてでそれを注入することができます。

@Injectable() 
export class ImageService { 

    constructor(private http: Http, @Inject('env') private env) { 
    } 

    load(): Observable<any> { 
     // assume apiUrl exists in you app's environment: 
     return this.http.get(`${this.env.apiUrl}/images`) 
      .map(res => res.json()); 
    } 

} 

私は助けてくれることを望みます!

関連する問題