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

NgRx/Data how to set loaded flag for an entitiy on getWithQuery

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

解析器正在监听 loaded$ observable,如果它是 false,他将调用 getAll 方法来获取消息,然后将 loaded 设置为 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,它起作用了。现在只调用一次后端,然后从存储中检索数据。

希望对您有所帮助。