Angularjs Angular 2 DI,使用自定义Http
我有一个使用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
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}
]