Доступ к службе EventEmitter внутри CustomHttp
Я создал пользовательский перехватчик для всех запросов Http:
import {EventEmitterService} from "./EventEmitter.service";
@Injectable()
export class CustomHttp extends Http {
constructor(backend: ConnectionBackend, defaultOptions: RequestOptions, _eventEmitterService:EventEmitterService) {
super(backend, defaultOptions);
}
get(url: string, options?: RequestOptionsArgs): Observable<Response> {
return super.get(url,{headers: interceptorHeaders}).catch((res)=>{
if (res.status === 403){
console.log("Interceptor here")
this._eventEmitterService.logout.emit("403");
}
return Observable.of(res);
});
}
}
Что отлично работает - всякий раз, когда я получаю 403 ответ от сервера, я получаю:
Interceptor here
в моей консоли.
Однако проблема с вводом EventEmitterService
в функцию catch. Всякий раз, когда я нахожусь внутри него, я не могу получить доступ к CustomHttp
- у меня есть доступ только к некоторым Observable
, хотя, когда я отлаживаю свой конструктор, я вижу, что был добавлен EventEmitterService
.
Вот как я вставляю EventEmitterService
:
bootstrap(App,[...,
EventEmitterService,
new Provider(Http, {
useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, _eventEmitterService:EventEmitterService) => new CustomHttp(backend, defaultOptions,_eventEmitterService),
deps: [XHRBackend, RequestOptions,EventEmitterService]
}),...]);
Ответы
Ответ 1
Возможно, вы просто пропустили ключевое слово private
на уровне параметра _eventEmitterService
конструктора CustomHttp
:
export class CustomHttp extends Http {
constructor(backend: ConnectionBackend,
defaultOptions: RequestOptions,
private _eventEmitterService:EventEmitterService) { // <----
super(backend, defaultOptions);
}