具有ngrx效果并带有操作符的角解析器

问题描述 投票:0回答:1

我在我的应用程序中有一条路由,该路由使用解析器从数据库获取数据(对象数组)。resolve函数检查数据是否以存储状态存在(如果数组具有长度),如果不存在,则分派一个效果以从db中获取数据并等待该效果完成。

fetch效果调度了一个“ set”效果,该效果不能通过错误进行,因为它只是设置了一些值。

我只想获取一次,以防万一用户刷新页面,他仍然会拥有所需的数据,但我的代码只是继续尝试获取,因为起初没有数据。

在我开始玩一些代码之后,我得到了以下内容:

  1. 如果我要添加水龙头或第二个switchMap(水龙头之后的那个),我得到一个无限循环
  2. 如果我从“第1行”(不包括)删除行,直到“第2行”(包括),则不会出现无限循环。

有人可以向我解释这种行为吗?

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){ 
    return this.store.select('company').pipe(
      take(1),
      map(comState => {
        return comState.comps;
      }),
      switchMap(comps => {
       if(!comps.length){
        this.store.dispatch(new CompActions.FetchAll());
        return this.actions$.pipe( 
          ofType(CompActions.SET_ALL), 
          take(1), //------------ "line number 1"
          // tap(() => {
          //   this.router.navigate([state.url.split('/')[1]]);
          // }),
          switchMap(actionData => {
            const re = /\d+/;
            const compInd = re.exec(state.url);
            if(compInd && +compInd < actionData['payload']['length']){
              return of(actionData['payload']);
            }
            this.router.navigate([state.url.split('/')[1]]);
          })//------------ "line number 2"
        );
       } else {
         return of(comp); 
       }
      })
    )
  }
angular ngrx ngrx-effects take
1个回答
0
投票

您不应该从resolve块内部导航。如果这样做,将再次检查防护罩。 Angular将决定您是否可以导航。您要导航到的路线在其他地方声明。

© www.soinside.com 2019 - 2024. All rights reserved.