2016-09-07 24 views
4

私はAngular 2とTypeScriptを使ってMeteor Webアプリケーションを開発しています。 REST APIを使用するために、Swagger Codegenを使用してクライアントコードを生成しました。残念ながら、GitHubにサンプルがありません。残りのクライアントを使用する方法はありません。生成されたSwagger TypeScript RestクライアントをAngular2で使用する

Iは、角2サービス(ProductTreeService)を注入された角度の2ビューコンポーネントと生成されたAPI(両方とも「@Injectable」としてマーク)を有する:角度サービスのみアクセス可能であるが

@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 
    { 
     //... 
    } 
} 

およびすべて正常に動作している、私は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を注入されたコンストラクタで何とか初期化されなければならないと思いました。実際には、この初期化は、threadで説明されているように、注入コンポーネントを含むNgModuleで行う必要があります。

この解決策は私のために働いた。

関連する問題