Wie füge ich einer Angular 4-Anwendung mehrere unabhängige HTTP-Interceptors hinzu?
Ich habe versucht, sie hinzuzufügen, indem ich das providers
Array mit mehr als einem Interceptor erweitert habe. Aber nur der letzte wird tatsächlich ausgeführt, Interceptor1
wird ignoriert.
@NgModule({
declarations: [ /* ... */ ],
imports: [ /* ... */ HttpModule ],
providers: [
{
provide: Http,
useFactory: (xhrBackend: XHRBackend, requestOptions: RequestOptions) =>
new Interceptor1(xhrBackend, requestOptions),
deps: [XHRBackend, RequestOptions],
},
{
provide: Http,
useFactory: (xhrBackend: XHRBackend, requestOptions: RequestOptions) =>
new Interceptor2(xhrBackend, requestOptions),
deps: [XHRBackend, RequestOptions]
},
],
bootstrap: [AppComponent]
})
export class AppModule {}
Ich könnte sie natürlich zu einer Interceptor
Klasse zusammenfassen und das sollte funktionieren. Ich möchte dies jedoch vermeiden, da diese Abfangjäger völlig unterschiedliche Zwecke haben (einen zur Fehlerbehandlung, einen zur Anzeige eines Ladeindikators).
Wie kann ich also mehrere Abfangjäger hinzufügen?
Http
. Es wird nur die letzte Überschreibung verwendet. Interceptor1 wird nicht ignoriert, es ist einfach nicht vorhanden. Sie können HttpClient verwenden, der Interceptors enthält.Antworten:
Http
erlaubt nicht mehr als eine benutzerdefinierte Implementierung. Wie @estus bereits erwähnte, hat das Angular-Team kürzlich einen neuen HttpClient- Dienst hinzugefügt (Version 4.3), der das Konzept mehrerer Interceptors unterstützt. Sie müssen das nichtHttpClient
wie beim alten erweiternHttp
. Sie könnenHTTP_INTERCEPTORS
stattdessen eine Implementierung für ein Array mit der folgenden'multi: true'
Option bereitstellen :Abfangjäger:
Dieser Serveraufruf druckt die Protokollnachrichten beider Abfangjäger:
quelle
api
Anruf nur von einem abgefangen werden kanninterceptor
? oder unter irgendwelchen Bedingungen?