我正在使用Angular 2和TypeScript处理Meteor Web应用程序。对于使用REST API,我使用Swagger Codegen生成了客户端代码。遗憾的是GitHub上没有样本,如何使用其余客户端。
我有一个角度2视图组件,它注入一个Angular 2服务(ProductTreeService)和生成的API(都标记为" @Injectable"):
constructor(protected http: Http, @Optional()@Inject(BASE_PATH) basePath: string) {
if (basePath) {
this.basePath = basePath;
}
}
虽然角度服务只能访问并且一切正常,但是当我注入UserApi时应用程序崩溃了。 UserApi和ProductTreeService之间的唯一区别是构造函数:服务没有构造函数参数,生成的Api class具有:
{{1}}
那么如何注入生成的API呢?
答案 0 :(得分:2)
经过进一步研究,我得到了解决方案。其余客户端UserApi的构造函数期望HTTP提供程序如下:
constructor(protected http: Http, @Optional()@Inject(BASE_PATH) basePath: string) {
if (basePath) {
this.basePath = basePath;
}
}
来自Java,我想也许这个提供程序必须在注入此API的构造函数中以某种方式进行初始化。实际上,这个初始化必须在包含注入组件的NgModule中完成,如thread中所述。
这个解决方案对我有用。
答案 1 :(得分:0)
古老的问题,但是...这就是应该怎么做:
providers: [
{
provide: API_BASE_URL, // or BASE_PATH
useFactory: () => {
return environment.apiBaseUrl // or return just "your base url as text"
}
}]
答案 2 :(得分:0)
我将环境属性文件与url属性一起使用:
export const environment = {
production: false,
basePath: 'https://virtserver.swaggerhub.com/user/project/1.0.0'
};
然后在app.module中为服务提供配置:
providers: [
{ provide: BASE_PATH, useValue: environment.basePath },
],
这适用于Swagger生成的代码。
希望有帮助! (已更新为Angular6 +)
https://blog.angulartraining.com/how-to-manage-different-environments-with-angular-cli-883c26e99d15