Jak dodać wiele niezależnych przechwytywaczy HTTP do aplikacji Angular 4?
Próbowałem je dodać, rozszerzając providers
tablicę o więcej niż jeden przechwytywacz. Ale tylko ostatnia jest faktycznie wykonywana, Interceptor1
jest ignorowana.
@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 {}
Mógłbym oczywiście połączyć je w jedną Interceptor
klasę i to powinno działać. Chciałbym jednak tego uniknąć, ponieważ te przechwytywacze mają zupełnie inne cele (jeden do obsługi błędów, drugi do wyświetlania wskaźnika ładowania).
Jak więc mogę dodać wiele przechwytywaczy?
Http
. Używana jest tylko ostatnia zmiana. Interceptor1 nie jest ignorowany, po prostu nie istnieje. Możesz użyć HttpClient, który zawiera przechwytywacze.Odpowiedzi:
Http
nie pozwala na więcej niż jedną niestandardową implementację. Ale jak wspomniał @estus, zespół Angular dodał niedawno nową usługę HttpClient (wersja 4.3), która obsługuje koncepcję wielu przechwytywaczy. Nie musisz przedłużać, takHttpClient
jak w przypadku staregoHttp
. Zamiast tego możesz podać implementację,HTTP_INTERCEPTORS
która może być tablicą z'multi: true'
opcją:Interceptory:
To wywołanie serwera wydrukuje komunikaty dziennika obu przechwytywaczy:
źródło
api
połączenie może zostać przechwycone tylko przez jednegointerceptor
? czy pod jakimikolwiek warunkami?