Angular2:订阅所有HTTP请求
我正在用Angular2构建一个网络应用程序 是否可以在Angular2每次发出HTTP请求时执行函数 这将用于检查JWT令牌是否需要刷新Angular2:订阅所有HTTP请求,angular,Angular,我正在用Angular2构建一个网络应用程序 是否可以在Angular2每次发出HTTP请求时执行函数 这将用于检查JWT令牌是否需要刷新 谢谢 您可以使用一个定制的Http类,该类提供组件或其他服务可以订阅的可观察对象,并在每次发出请求时发出事件 @Injectable() 类NotifyingHttp扩展了Http{ requestSent:Subject=新主题(); 请求已完成:主题=新主题(); 构造函数(_backend:ConnectionBackend,_defaultOptio
谢谢 您可以使用一个定制的
Http
类,该类提供组件或其他服务可以订阅的可观察对象,并在每次发出请求时发出事件
@Injectable()
类NotifyingHttp扩展了Http{
requestSent:Subject=新主题();
请求已完成:主题=新主题();
构造函数(_backend:ConnectionBackend,_defaultOptions:RequestOptions){
超级(_后端,_默认选项);
}
获取(url:string,options?:RequestOptionsArgs):可观察{
this.requestSent.next(url);
返回super.get(新URL、选项)
.finally(response=>this.requestCompleted.next(url));
}
职位(……)
...
}
每个方法都需要以这种方式重写(get、post等)
您可以创建一个共享模块,然后将其添加到AppModule
的导入中激活:
@NgModule({
导入:[HttpModule],
导出:[HttpModule],
供应商:[
{provide:ConnectionBackend:useClass XhrBackend},
{provide:Http,useClass:NotifyingHttp}]
})
导出类NotifyingHttpModule{}
@NgModule({
导入:[BrowserModule,NotifyingHttpModule],
声明:[AppModule],
引导:[AppModule]
})
导出类AppModule{}
另请参见您需要使用工厂。扩展Http仍然会导致Angular调用Http构造函数,而不是自定义类构造函数()。所以你需要使用一个工厂,自己创建它。由于ConnectionBackend是一个接口(没有该令牌的提供程序),您需要为工厂使用XHRBackend。这可能解释了为什么我必须添加一个提供程序
{provide:ConnectionBackend:useclassxhrbackend}
,但应该这样做(根据我最近在plunker中进行的测试)