参见英文答案 >
angular2 resolveAndCreate HTTP – missing HTTP_PROVIDERS in RC7 1个
我需要在不使用Angular2的DI(构造函数(私有http:Http))的情况下获取Http的实例
我需要在不使用Angular2的DI(构造函数(私有http: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 { }
只需将上面提供程序中的所有内容添加到您传递给ReflectiveInjector.resolveAndCreate的数组中.
如果您的目标是在引导程序之前获取Http,那么您需要处理另一件小事,即CookieXSRFStrategy.它在引导之前不起作用,因为它依赖于某些平台浏览器的东西.你可以用noop替换它,如this post所述