angular - 如何在不使用构造函数 DI 的情况下创建 Http 实例? (RC.5+)

标签 angular angular-rc5

<分区>

我需要在不使用 Angular2 的 DI 的情况下获取 Http 的实例(constructor(private http: Http))

以下代码摘自another 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+ 中执行相同的操作吗?

最佳答案

只需查看 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 的数组中即可。

如果您的目标是在 Bootstrap 之前获取 Http,那么您还需要注意另一件小事,即 CookieXSRFStrategy。它在引导之前不起作用,因为它依赖于某些平台浏览器的东西。您可以将其替换为 noop,如 this post 中所述

关于angular - 如何在不使用构造函数 DI 的情况下创建 Http 实例? (RC.5+),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39622965/

相关文章:

angular - PrimeNg 条形图如何显示 y 轴的标签

angular - 如何在angular2中的每个路由更改上调用一个函数

Angular 2 RC5 测试 Promise 在 ngOnInit 中不起作用

angular - @Output 改变 bool 状态

Angular 8 ng适用于键值管道和 ng 模型。存在具有约束力的值(value)观问题

forms - angular 2 rc5 中基于模型的表格不起作用

unit-testing - Angular 2 TestBed,没有依赖注入(inject)的模拟方法

angular 2 RC5 ngModules 与桶

angular - 如何在angular2中使用指令