Ich folgte diesem Beitrag (http://www.adonespitogo.com/articles/angular-2-extending-http-provider/), um die Http-Klasse zu erweitern und eine statische Methode hinzugefügt, die ein Singleton von Http zurückgibt.
./services/http.service.ts
import { Injectable, ReflectiveInjector } from '@angular/core';
import {
BaseResponseOptions,
BaseRequestOptions,
BrowserXhr,
ConnectionBackend,
CookieXSRFStrategy,
Headers,
Http as HttpParent,
Request,
RequestOptions,
RequestOptionsArgs,
Response,
ResponseOptions,
XHRBackend,
XSRFStrategy
} from '@angular/http';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class CustomHttp extends HttpParent {
public static getInstance() {
if (!(this._instance instanceof CustomHttp)) {
this._instance = ReflectiveInjector.resolveAndCreate([
CustomHttp, BrowserXhr, XHRBackend,
{ provide: ConnectionBackend, useClass: XHRBackend },
{ provide: ResponseOptions, useClass: BaseResponseOptions },
{ provide: XSRFStrategy, useFactory:() => {
return new CookieXSRFStrategy();
}
},
{ provide: RequestOptions, useClass: BaseRequestOptions }
]).get(CustomHttp);
}
return this._instance;
}
private static _instance: CustomHttp;
}
./app.module.ts
import { NgModule } from '@angular/core';
import { HttpModule, RequestOptions, XHRBackend } from '@angular/http';
import { CustomHttp } from './services/http.service';
@NgModule({
bootstrap: [
AppComponent
],
declarations: [
AppComponent
],
imports: [
HttpModule
],
providers: [
{
provide: CustomHttp,
useFactory: (backend: XHRBackend, options: RequestOptions) => {
return new CustomHttp(backend, options);
},
deps: [XHRBackend, RequestOptions]
};
]
})
export class AppModule {}
./services/validation.service.ts
import CustomHttp from './http.service';
export class ValidationService {
static public doSomething() {
CustomHttp.getInstance().get('some/api/').subscribe(
(response) => {
console.log(response);
})
}
}
Ich hoffe es funktioniert für dich.
Danke, dann ich denke, Ich sollte die statische ändern. Ich denke, ich sollte mehr darüber googlen. – revathi
Können Sie die Lösung näher erläutern? Ich habe ein ähnliches Problem mit dem Validierungsdienst und befolge dieses Tutorial [link] (https://coryrylan.com/blog/angular-form-builder-and-validation-management), um Validierungen für ein Formular zu erstellen. Wenn ich http in den Dienst einfüge, werde ich undefiniert. Ich bin ein wenig mit statischen Funktionen nicht vertraut und nicht sicher, ob das der Grund ist, warum es nicht funktioniert? – PBandJen
Wie bezieht sich ein Validierungsservice auf die statische Methode? Es ist möglicherweise besser, eine neue Frage zu erstellen, in der Sie den Code hinzufügen, der zeigt, was Sie erreichen möchten. –