将环境变量传递给angular2库

问题描述:

我使用angualr2库自动生成器创建了公司内部库。将环境变量传递给angular2库

一些角度服务正在我们当前的应用程序中使用环境变量(每个env都会更改api端点)。我想知道将当前环境对象传递给angular2库服务的最佳方式是什么?

+0

你得到了这个答案吗?我想要做同样的事情 – leopic

如果您仍然在寻找解决方案,下面是我如何完成某些东西(您使用的是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()); 
    } 

} 

我希望有帮助!