Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular2:订阅所有HTTP请求_Angular - Fatal编程技术网

Angular2:订阅所有HTTP请求

Angular2:订阅所有HTTP请求,angular,Angular,我正在用Angular2构建一个网络应用程序 是否可以在Angular2每次发出HTTP请求时执行函数 这将用于检查JWT令牌是否需要刷新 谢谢 您可以使用一个定制的Http类,该类提供组件或其他服务可以订阅的可观察对象,并在每次发出请求时发出事件 @Injectable() 类NotifyingHttp扩展了Http{ requestSent:Subject=新主题(); 请求已完成:主题=新主题(); 构造函数(_backend:ConnectionBackend,_defaultOptio

我正在用Angular2构建一个网络应用程序

是否可以在Angular2每次发出HTTP请求时执行函数

这将用于检查JWT令牌是否需要刷新


谢谢

您可以使用一个定制的
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中进行的测试)