NgRx / Data如何在getWithQuery上为实体设置加载标志

问题描述

我目前在我的项目中使用NgRx数据来处理新闻实体。
我有一个解析器来检查新闻实体是否已加载,然后路由到/ news页面(在其中显示新闻)

解析器正在侦听已加载的$观察符,如果为false,则将调用getAll方法获取新闻,然后将其设置为true。

但是我实现了无限滚动,现在只想通过.getWithQuery方法通过查询获取新闻。这工作正常,但是当我通过查询新闻获得调度的动作时:

“ ngrx / data / get / many / success”仅更改加载标志,而不更改加载标志。

enter image description here

因此,解析程序从不路由到页面。在成功完成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,它起作用了。现在只调用一次后端,然后就可以从存储中检索数据了。

我希望它能帮上忙。