Angularjs Angular 2 DI,使用自定义Http

Angularjs Angular 2 DI,使用自定义Http,angularjs,angular,Angularjs,Angular,我有一个使用Http的服务: import { Injectable } from '@angular/core'; import { Inject } from '@angular/core'; import { Http, Headers, Response } from '@angular/http'; @Injectable() export class OrdersService { constructor(@Inject(Http) private http:Htt

我有一个使用Http的服务:

import { Injectable }     from '@angular/core';
import { Inject } from '@angular/core';
import { Http, Headers, Response } from '@angular/http';

@Injectable()
export class OrdersService {
    constructor(@Inject(Http) private http:Http) {}
    ...
}
以及使用它的组件

import { Component } from '@angular/core';
import { FormBuilder, Validators } from '@angular/common';
import { HTTP_PROVIDERS } from '@angular/http';
import { Router} from '@angular/router';

import { OrdersService } from '../services/orders.service'

@Component({
  selector: 'login',
  templateUrl: './login.component.html',
  providers: [
      HTTP_PROVIDERS, //{ provide: Http, useClass: Http }
      AuthService, AuthStore,
      OrdersService
  ]
})
export class LoginComponent {

    constructor(private authService: AuthService, private ordersService: OrdersService){}
      ....
}
这很有效。我有一些注释掉的文本{provide:Http,useClass:Http}。我想在这里提供我自己的类来扩展Http,但仍然具有所有相同的依赖性。我在这里采取的第一步是显式使用Http

一旦我取消对该文本的评论(并添加http导入),一切都会中断。我收到错误“没有连接后端的提供程序”。HTTP_提供程序似乎刚刚停止作为提供程序工作

  • 如何明确使用Http?
  • 如何使用自己的自定义HTTP和HTTP\U提供程序中的提供程序?

当您使用自己的
自定义HTTP
时,您不需要使用
HTTP\u提供者
,您需要执行以下操作(如果您使用的是RC5,则在app.module.ts中,如果您使用的是RC4,则在main.ts中):

我也有同样的问题,这帮我解决了

编辑:


如果使用RC5,则不需要导入
HTTP\u提供程序
,因为您将导入
HttpModule
,但我不清楚您是否需要RC4中的
HTTP\u提供程序
。您可能需要它。

如果您不想更改XHRBackend和RequestOptions的实现,您可以做得更简单,如:

providers: [
    {provide: Http, useClass: MyCustomHttp}
]

angular2团队引入新的模块概念后,angular2.1及以上版本中提供选项的语法发生了变化。下面,您将找到如何在app.module.ts中添加自己的自定义Http提供程序的正确语法

导出函数httpFactory(后端:XHRBackend,默认选项:RequestOptions){
返回新的CustomHttp(后端,默认选项);
}
...
供应商:[
{提供:Http,
useFactory:httpFactory,
deps:[XHRBackend,RequestOptions]
}
]
您也可以在此处验证angular2文档:

如果您想实现自己的CustomHttp类,我建议您阅读Thierry Templier的文章,当他逐步介绍如何实现这一点时


这是一篇非常有用的文章,它描述了如何扩展以拦截请求调用和添加自定义处理错误

在Angular 2.1.1上,不需要
HTTP\U提供程序
。确保在自定义http类中使用
XHRBackend
作为构造函数参数。我在这里写了一个更全面的指南,在我的例子中,我有另一个自定义提供者,它使用我的自定义Http实现。在我这么做之前,我一直有很多问题。非常感谢@Serginho
providers: [
    {provide: Http, useClass: MyCustomHttp}
]