我想要使用自定义类覆盖Http
,说HttpClient
在请求之前和回复之后执行某些操作,但是我不想记得导入类而不是平台的http类。
我一直在尝试通过' multi'提供商,但我无法点击它。
这是我的覆盖类:
import {Injectable} from '@angular/core';
import {Http, Headers} from '@angular/http';
@Injectable()
export class HttpClient {
private http: Http;
constructor(http: Http) {
this.http = http;
}
get(url) {
let headers = new Headers();
doSomethingToHeader(headers);
return this.http.get(url, {
headers: headers
});
}
}
这是我的主要内容
bootstrap(AppComponent, [
provide(HTTP_PROVIDERS, {useExisting: HTTP_PROVIDERS, multi: true}),
provide(HTTP_PROVIDERS, {useClass: HttpClient, multi: true})
]);
但是当我尝试在我的应用程序中调用http.get()时,我得到了
ORIGINAL EXCEPTION: No provider for Http!
有什么想法吗?我是以错误的方式解决这个问题吗?
谢谢!
更新
我发现了blog post。它几乎描述了Gunter在下面描述的内容。我接受了他的回答。
答案 0 :(得分:2)
multi: true
提供商({1}}时, multi
才有效。 PLATFORM_DIRECTIVES
不是HTTP_PROVIDERS
个提供商,它只是各个提供商的集合。
你能做的是
multi
导致周期(见评论)
这应该有效:
bootstrap(AppComponent, [HTTP_PROVIDERS, {provide: Http, useClass: HttpClient}])
重要的一点是,覆盖bootstrap(AppComponent, [
HTTP_PROVIDERS,
{
provide: Http,
useFactory: (backend, defaultOptions) => new HttpClient(new Http(backend, defaultOptions)),
deps: [XHRBackend, RequestOptions]
}
])
中定义的提供程序的自定义提供程序会在您想要覆盖的后 。因此HTTP_PROVIDERS
HTTP_PROVIDERS
非常重要
使用{provide: Http, ...}
,您不会覆盖提供商,而是将另一个项目添加到提供一组值的提供商。