Como adicionar vários interceptores HTTP independentes a um aplicativo Angular 4?
Tentei adicioná-los estendendo a providers
matriz com mais de um interceptador. Mas apenas o último é realmente executado, Interceptor1
é ignorado.
@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, eu poderia combiná-los em uma única Interceptor
classe e isso deve funcionar. No entanto, eu gostaria de evitar isso, já que esses interceptores têm finalidades completamente diferentes (uma para tratamento de erros, outra para mostrar um indicador de carregamento).
Então, como posso adicionar vários interceptores?
Http
. Apenas a última substituição é usada. O Interceptor1 não é ignorado, ele simplesmente não existe. Você pode usar o HttpClient que possui interceptores incluídos.Respostas:
Http
não permite ter mais de uma implementação customizada. Mas, como @estus mencionou, a equipe do Angular adicionou um novo serviço HttpClient recentemente (versão 4.3) que suporta o conceito de múltiplos interceptores. Você não precisa estender oHttpClient
como faz com o antigoHttp
. Você pode fornecer uma implementação para, emHTTP_INTERCEPTORS
vez disso, que pode ser uma matriz com a'multi: true'
opção:Interceptadores:
Esta chamada do servidor imprimirá as mensagens de registro de ambos os interceptores:
fonte
api
chamada pode ser interceptada por apenas uminterceptor
? ou por quaisquer condições?