KCa*_*lle 15 observable typescript angular angular-router
我正在研究它好几天,但到目前为止还没有找到任何解决方案.
我有一个解析器服务,它应该返回一个Observable:
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) : Observable<any>|Promise<any>{
return Observable.forkJoin(
this.http.get(first call with queryParam),
this.http.get(second call with queryParam),
);
}
Run Code Online (Sandbox Code Playgroud)
我订阅了组件中的ActivatedRoute数据,并且它运行良好.
但是,正如您在上面的代码中看到的,我的组件有一个queryParam,我的API调用依赖于这个queryParam.当我手动更改它时,它不会再次"解析"该路线.
我完全理解为什么,我阅读了文档.
有没有人有解决方法?在这种情况下,这甚至可以订阅params并返回一个Observable吗?
到目前为止我试过这个,但是它没有返回一个Observable,所以它什么也没做:
this.router.events.subscribe(event => {
if(event instanceof ResolveEnd){
// My previous Observable.forkJoin
}
});
Run Code Online (Sandbox Code Playgroud)
谢谢 :) !
----------- 解决方案(感谢Maximus): -----------
添加路由:
{
path: 'some path',
runGuardsAndResolvers: 'paramsOrQueryParamsChange'
...
}
Run Code Online (Sandbox Code Playgroud)
然后,无需订阅路线事件或任何东西!魔法 !
Max*_*kyi 25
您可以使用runGuardsAndResolvers该路线.以下是官方文档的说法:
...定义何时运行警卫和解析器.默认情况下,它们仅在路径的矩阵参数更改时运行.当设置为paramsOrQueryParamsChange时,它们也将在查询参数更改时运行.当设置为always时,它们每次都会运行.
因此,在定义路径时,您可以像这样使用它:
{
path: 'some path',
runGuardsAndResolvers: 'paramsOrQueryParamsChange'
...
}
Run Code Online (Sandbox Code Playgroud)
这应该重新运行警卫和解析器.
| 归档时间: |
|
| 查看次数: |
3938 次 |
| 最近记录: |