2016-09-07 61 views
4

我正在使用Angular 2和TypeScript處理Meteor Web應用程序。爲了使用REST API,我使用Swagger Codegen生成了客戶端代碼。不幸的是,GitHub上沒有示例,如何使用其餘的客戶端。在Angular2中使用生成的Swagger TypeScript Rest Client

我具有被注入角2服務(ProductTreeService)和所生成的API(兩個標記爲「@Injectable」)的角2的視圖組件:

@Component({ 
    selector: 'panel-product-selection', 
    template, 
    providers: [ProductTreeService, UserApi], 
    directives: [ProductTreeComponent] 
}) 

export class PanelProductSelectionComponent 
{ 
    private categoriesProductsTree: Collections.LinkedList<CategoryTreeElement>; 
    private productTreeService: ProductTreeService; 
    private userApi: UserApi; 

    constructor(productTreeService: ProductTreeService, userApi: UserApi) 
    { 
     this.productTreeService = productTreeService; 
     this.userApi = userApi; 
    } 

    ngOnInit(): void 
    { 
     //... 
    } 
} 

雖然角服務僅是accessable和所有工作正常,當我注入UserApi時,應用程序崩潰。 UserApi和ProductTreeService之間的唯一區別是構造函數:服務沒有構造函數的參數,生成的Api class有:

constructor(protected http: Http, @Optional()@Inject(BASE_PATH) basePath: string) { 
    if (basePath) { 
     this.basePath = basePath; 
    } 
} 

所以,我怎麼能注入產生的API?

+0

你可以請包括一些生成的代碼? UserApi,是不是隻是提供的示例?您鏈接的代碼並不意味着包含在項目中 - 它是生成代碼的一個示例。 – Martin

+0

以下是使用由Swagger Codegen生成的Typescript-angular2 API客戶端的示例:https://github.com/taxpon/ng2-swagger-example。這會有幫助嗎? –

回答

1

經過進一步的研究,我得到了解決方案。其餘客戶UserApi的構造函數期待一個HTTP提供如下:

constructor(protected http: Http, @Optional()@Inject(BASE_PATH) basePath: string) { 
    if (basePath) { 
     this.basePath = basePath; 
    } 
} 

從Java的到來,我想,也許這個供應商必須在其中注入該API構造函數初始化莫名其妙。實際上,該初始化必須在包含注入組件的NgModule中完成,如thread中所述。

此解決方案適用於我。