如何在 queryParams 更改时重新运行解析器

How to rerun resolvers when queryParams change

我已经研究了几天,但到目前为止还没有找到任何解决方案。

我有一个解析器服务,它应该 return 一个 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),             
    );
}

我在组件中订阅了我的 ActivatedRoute 数据,它运行良好。

但是,正如您在上面的代码中看到的,我的组件有一个 queryParam,而我的 API 调用依赖于此 queryParam。当我手动更改它时,它不会再次 "resolve" 路线。

我完全明白为什么,我看了文档。

有人有解决方法吗?在这种情况下,甚至可以订阅参数和 return Observable 吗?

到目前为止我试过了,但它不是 return Observable,所以它什么都不做 :

this.router.events.subscribe(event => { 
    if(event instanceof ResolveEnd){
      // My previous Observable.forkJoin
    }
});

谢谢 :) !

------------ 解决方案(感谢 Maximus): ------------

在路由中添加:

{
   path: 'some path',
   runGuardsAndResolvers: 'paramsOrQueryParamsChange'
   ...
}

然后,无需订阅路线事件或任何东西!魔法!

您可以使用 runGuardsAndResolvers 作为路线。这是官方文档所说的:

... defines when guards and resolvers will be run. By default they run only when the matrix parameters of the route change. When set to paramsOrQueryParamsChange they will also run when query params change. And when set to always, they will run every time.

所以在定义路由时可以这样使用:

{
   path: 'some path',
   runGuardsAndResolvers: 'paramsOrQueryParamsChange'
   ...
}

这应该重新运行 守卫和解析器。