Как добавить несколько независимых перехватчиков HTTP в приложение Angular 4?
Я попытался добавить их, расширив providers
массив более чем одним перехватчиком. Но фактически выполняется только последнее, Interceptor1
игнорируется.
@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 {}
Очевидно, я мог бы объединить их в один Interceptor
класс, и это должно сработать. Однако я бы хотел избежать этого, поскольку эти перехватчики имеют совершенно разные цели (один для обработки ошибок, один для отображения индикатора загрузки).
Итак, как я могу добавить несколько перехватчиков?
Http
. Используется только последнее изменение. Interceptor1 не игнорируется, его просто нет. Вы можете использовать HttpClient, в который включены перехватчики.Ответы:
Http
не позволяет иметь более одной пользовательской реализации. Но, как упомянул @estus, команда Angular недавно добавила новую службу HttpClient (выпуск 4.3), которая поддерживает концепцию нескольких перехватчиков. Вам не нужно расширять,HttpClient
как вы это делаете со старымHttp
.HTTP_INTERCEPTORS
Вместо этого вы можете предоставить реализацию, которая может быть массивом с'multi: true'
опцией:Перехватчики:
Этот вызов сервера распечатает сообщения журнала обоих перехватчиков:
источник
api
вызов может быть перехвачен только однимinterceptor
? или по каким-либо условиям?