我已经使用angualr2-library yeoman生成器创建了公司内部库.
一些angular服务在我们当前的应用程序中使用环境变量(每个env上的api端点都会更改).我想知道将当前环境对象传递给angular2图书馆服务的最佳方式是什么?
我已经使用angualr2-library yeoman生成器创建了公司内部库.
一些angular服务在我们当前的应用程序中使用环境变量(每个env上的api端点都会更改).我想知道将当前环境对象传递给angular2图书馆服务的最佳方式是什么?
如果你还在寻找解决方案,下面是我如何完成一些与你要求的类似的事情(使用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()
方法.
在提供者数组中,您可以提供服务,值为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());
}
}
我希望这有帮助!