Вы могли бы реализовать класс, который расширяет Http
один:
@Injectable()
export class CustomHttp extends Http {
constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) {
super(backend, defaultOptions);
}
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
console.log('request...');
return super.request(url, options).catch(res => {
// do something
});
}
get(url: string, options?: RequestOptionsArgs): Observable<Response> {
console.log('get...');
return super.get(url, options).catch(res => {
// do something
});
}
(...)
}
и зарегистрировать его, как описано ниже:
bootstrap(AppComponent, [HTTP_PROVIDERS,
new Provider(Http, {
useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions),
deps: [XHRBackend, RequestOptions]
})
]);
Если 401 возникают ошибки в этом уровне, вы могли бы перехватить их по всему миру в обратный вызов catch. Вы можете использовать внедренные элементы для их обработки. Например, Router
.
Whith этого подхода я получаю всегда следующую ошибку: улов не является функцией я демонстрирую это уже: https://github.com/lexon0011/IssueDemonstrator Может кто-нибудь воспроизвести ошибку? –
См. Этот вопрос: http://stackoverflow.com/questions/34515173/angular-2-http-get-with-typescript-error-http-get-map-is-not-a-function-in/34515276#34515276 Вам нужно импортировать оператор catch, как для карты (замените карту на catch в ответе ;-)) –