gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:58:19 26 4
gpt4 key购买 nike

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

我有一个解析器服务,它应该返回一个 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。当我手动更改它时,它不会再次“解析”路线。

我完全理解为什么,我阅读了文档。

有没有人有解决方法?在这种情况下,甚至可以订阅参数并返回一个 Observable 吗?

到目前为止我试过了,但它没有返回一个 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'
...
}

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

关于angular - 如何在 queryParams 更改时重新运行解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45234826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com