4

Angular2 の DI ( constructor(private http: Http) ) を使用せずに Http のインスタンスを取得する必要があります。

次のコードは、別の stackoverflow questionから取得したもので、Angular2 RC.4 以前のバージョンでは機能しますが、RC.5+ (HTTP_PROVIDERS は使用できなくなりました) では機能しません。

const injector = ReflectiveInjector.resolveAndCreate([
  HTTP_PROVIDERS
]);

this.http = injector.get(Http);

Stackoverflow には、同じコードのさまざまなバリエーションに関するいくつかの質問がありますが、RC.5+ ではどれも機能しません。

RC.5+で同じことを実行する方法を知っている人はいますか?

4

2 に答える 2

3

のソースを見てくださいHttpModule。を作成するために必要なすべてのプロバイダーが表示されますHttp。これらのプロバイダーのほとんどは、現在削除されているものでしたHTTP_PROVIDERS

export function _createDefaultCookieXSRFStrategy() {
  return new CookieXSRFStrategy();
}

export function httpFactory(xhrBackend: XHRBackend, requestOptions: RequestOptions): Http {
  return new Http(xhrBackend, requestOptions);
}

@NgModule({
  providers: [
    {provide: Http, useFactory: httpFactory, deps: [XHRBackend, RequestOptions]},
    BrowserXhr,
    {provide: RequestOptions, useClass: BaseRequestOptions},
    {provide: ResponseOptions, useClass: BaseResponseOptions},
    XHRBackend,
    {provide: XSRFStrategy, useFactory: _createDefaultCookieXSRFStrategy},
  ],
})
export class HttpModule {
}

providersに渡す配列に上記のすべてを追加するだけですReflectiveInjector.resolveAndCreate

あなたの目標がHttpbefore ブー​​トストラップを取得することである場合、もう 1 つ注意しなければならないことがありますCookieXSRFStrategy。一部のプラットフォーム ブラウザに依存するため、ブートストラップ前には機能しません。この投稿で説明されているように、noop に置き換えることができます。

于 2016-09-21T18:33:50.357 に答える