2017-04-20 256 views
7

我使用angualr2庫自動生成器創建了公司內部庫。將環境變量傳遞給angular2庫

一些角度服務正在我們當前的應用程序中使用環境變量(每個env都會更改api端點)。我想知道將當前環境對象傳遞給angular2庫服務的最佳方式是什麼?

+0

你得到了這個答案嗎?我想要做同樣的事情 – leopic

回答

2

如果您仍然在尋找解決方案,下面是我如何完成某些東西(您使用的是Angular 4.2.4)。

在您的AppModule(或您想要導入圖書館的地方)中,撥打LibraryModule上的forRoot()方法。藉助此功能,您可以將任何配置值傳遞給您的庫,例如你的應用程序的環境。

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

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

當然,你LibraryModule需要提供forRoot()方法。 在providers數組中,您可以提供服務,值爲and more。在這種情況下,爲了簡單起見,'env'充當保持給定環境對象的標記。您也可以使用InjectionToken

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

    public static forRoot(environment: any): ModuleWithProviders { 

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

由於令牌env現在由您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()); 
    } 

} 

我希望有幫助!

相關問題