有效的ngrx路由器存储选择器

问题描述

假设我的应用中有一个列表和一个分页我有这种状态:

{
  ...
  itemsPerPage: number;
  searchPhrase?: string;
}

此外,我必须有一个pageIndex(当前页号),并且可以从Url获​​取它。为此,我有一个选择器:

export const getCurrentPageIndex = createSelector(
  selectRouteParam("pageIndex"),(pageIndex) => {
    return pageIndex ? parseInt(pageIndex,10) : 1;
  }
);

,我的路线有{:pageIndex}参数。到目前为止一切顺利。

现在,我有一个处理当前页面数据的方法,它使用pageIndex从状态(包括使用提到的选择器的withLatestFrom()获取所有必需的参数,然后从服务器请求数据) 。这样简单的场景,例如更改页面工作。

现在,假设有一个 Filter 字段,用户可以在其中输入内容,然后输入searchPhrase,然后我需要刷新页面需要将当前页码pageIndex)设置为1。此pageIndex来自路由器存储。因此,这就是我在效果上所做的事情:

  loadPageByNumber$ = createEffect(
    () =>
      this.actions$.pipe(
        ofType(MyActions.loadPageByNumber),tap((action) => {
          this.router.navigate([`/someroute/${action.pageIndex}`]);
        }),map(() => MyActions.loadPageOfData({}))
      )
    //{ dispatch: false }
  );

这就是问题所在。即使我对新页面进行了navigate的操作,loadPageOfData()仍然从路由器存储选择器中看到了旧的pageIndex

例如,路线/items/30-获取第30页数据。现在,用户输入搜索短语-状态更改,我需要将pageIndex重置为1(因为现在这是完全不同的数据集)。我的逻辑不起作用,pageIndex在加载数据效果内部保持不变。

如何解决此问题,或者我在做什么错了?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)