在 CustomHttp 中访问 EventEmitter 服务
Access EventEmitter Service inside of 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]
}),...]);
也许您只是在 CustomHttp
构造函数的 _eventEmitterService
参数级别错过了 private
关键字:
export class CustomHttp extends Http {
constructor(backend: ConnectionBackend,
defaultOptions: RequestOptions,
private _eventEmitterService:EventEmitterService) { // <----
super(backend, defaultOptions);
}
我已经为所有 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]
}),...]);
也许您只是在 CustomHttp
构造函数的 _eventEmitterService
参数级别错过了 private
关键字:
export class CustomHttp extends Http {
constructor(backend: ConnectionBackend,
defaultOptions: RequestOptions,
private _eventEmitterService:EventEmitterService) { // <----
super(backend, defaultOptions);
}