问题描述
我目前在我的项目中使用NgRx数据来处理新闻实体。
我有一个解析器来检查新闻实体是否已加载,然后路由到/ news页面(在其中显示新闻)
解析器正在侦听已加载的$观察符,如果为false,则将调用getAll方法获取新闻,然后将其设置为true。
但是我实现了无限滚动,现在只想通过.getWithQuery方法通过查询来获取新闻。这工作正常,但是当我通过查询新闻获得调度的动作时:
“ ngrx / data / get / many / success”仅更改加载标志,而不更改加载标志。
因此,解析程序从不路由到页面。在成功完成getWithQuery之后,有什么方法可以更改加载的标志吗?我的解析器当前如下所示:
resolve(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<boolean> {
return this.newsEntityService.loaded$
.pipe(
tap(loaded => {
if (!loaded) {
this.newsEntityService.getAll(); // <-- here I want to call .getWithQuery(queryParams)
}
}),filter(loaded => !!loaded),first()
);
}
我试图像这样手动设置加载的标志:
this.newsEntityService.getWithQuery({startIndex: '0',endindex: '5'}).pipe(
tap(news => this.newsEntityService.setLoaded(true))
);
但这不起作用。
我也在文档中进行了搜索,发现可以覆盖默认的reducer,但是我真的不知道如何实现。
https://ngrx.io/guide/data/entity-reducer#entity-cache-metareducers
解决方法
我遇到了同样的问题,这让我发疯了2天,我不确定这是否是最好的解决方案,但是作为一种变通办法,我做到了。
return this.paymentsService.loaded$
.pipe(
tap(loaded => {
if (!loaded) {
this.paymentsService.getWithQuery(this.propertyId.toString()).subscribe(
{
next: value => this.paymentsService.setLoaded(true)
}
);
}
}),filter(loaded => !!loaded),first()
);
我订阅了,然后将标志设置为true,它起作用了。现在只调用一次后端,然后就可以从存储中检索数据了。
我希望它能帮上忙。