¿Cómo agregar múltiples interceptores HTTP independientes a una aplicación de Angular 4?
Intenté agregarlos extendiendo la providers
matriz con más de un interceptor. Pero solo el último se ejecuta realmente, Interceptor1
se ignora.
@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 {}
Obviamente, podría combinarlos en una sola Interceptor
clase y eso debería funcionar. Sin embargo, me gustaría evitar eso, ya que estos interceptores tienen propósitos completamente diferentes (uno para el manejo de errores, otro para mostrar un indicador de carga).
Entonces, ¿cómo puedo agregar múltiples interceptores?
Http
. Solo se utiliza la última anulación. El Interceptor1 no se ignora, simplemente no existe. Puede usar HttpClient que tiene interceptores incluidos.Respuestas:
Http
no permite tener más de una implementación personalizada. Pero como mencionó @estus, el equipo de Angular ha agregado un nuevo servicio HttpClient recientemente (versión 4.3) que admite el concepto de múltiples interceptores. No es necesario extender elHttpClient
como lo hace con el antiguoHttp
. En su lugar, puede proporcionar una implementaciónHTTP_INTERCEPTORS
que puede ser una matriz con la'multi: true'
opción:Interceptores:
Esta llamada al servidor imprimirá los mensajes de registro de ambos interceptores:
fuente
api
llamada puede ser interceptada por solo unointerceptor
? o por alguna condición?