在Angular2中使用生成的Swagger TypeScript Rest Client

时间:2016-09-07 14:41:25

标签: javascript meteor angular typescript swagger

我正在使用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呢?

3 个答案:

答案 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