0

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

解析器正在监听loaded$ observable,如果它是假的,他将调用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))
        );

但这不起作用。

我还在文档中进行了搜索,发现您可以覆盖默认减速器,但我真的不知道这是如何完成的。

https://ngrx.io/guide/data/entity-reducer#entity-cache-metareducers

4

1 回答 1

2

我遇到了同样的问题,这让我发疯了 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 并且它起作用了。现在对后端的调用只进行了一次,然后从存储中检索数据。

我希望它有所帮助。

于 2020-11-05T12:46:07.110 回答