Reputation: 1136
I am trying to use an alternative class for Http in Angular 2.
I want to do so to have a CustomHttp class setting default options in constructor
import {Injectable} from 'angular2/core';
import {Http, RequestOptions, ConnectionBackend} from 'angular2/http';
@Injectable()
export class CustomHttp extends Http {
constructor(_backend: ConnectionBackend, _defaultOptions: RequestOptions) {
super(_backend, _defaultOptions);
let jwtHeader = localStorage.getItem('jwt');
if (jwtHeader != null) {
this._defaultOptions.headers.append('Authorization', jwtHeader);
}
console.log("Pouet CustomHttp");
}
}
I tried various options when bootstrapping, as I want this overload to be global to my app.
I tried :
bootstrap(AppComponent,
[HTTP_PROVIDERS,
ROUTER_PROVIDERS,
provide(Http, {useClass: CustomHttp,deps: [XHRBackend, BaseRequestOptions]})
]);
it raises :
browser_adapter.ts:73 EXCEPTION: No provider for ConnectionBackend! (TAPComponent -> SensService -> Http -> ConnectionBackend)
I also tried :
bootstrap(AppComponent,
[HTTP_PROVIDERS,
ROUTER_PROVIDERS,
provide(Http, {useFactory:
function(backend, defaultOptions) {
return new CustomHttp(backend, defaultOptions);
},
deps: [XHRBackend, BaseRequestOptions]})
]);
it raises :
browser_adapter.ts:73 EXCEPTION: No provider for BaseRequestOptions! (TAPComponent -> SensService -> Http -> BaseRequestOptions)
What should I do ?
I am using beta 9.
Upvotes: 3
Views: 2589
Reputation: 202256
You need to use a factory to configure it with RequestOptions
instead of BaseRequestOptions
:
bootstrap(AppComponent, [HTTP_PROVIDERS,
new Provider(Http, {
useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions),
deps: [XHRBackend, RequestOptions]
})
]);
HTTP_PROVIDERS
only provides RequestOptions
not BaseRequestOptions
.
BaseRequestOptions
should be used if you want to define custom request options by defining a sub class of it.
Upvotes: 2