如何基于NgRX存储数据组成Angular Guard

时间:2018-12-12 15:53:43

标签: angular rxjs ngrx

我正在尝试创建防护程序,以检查惠特尔路由参数的值是否出现在位置列表(位于NgRX存储中)中。

问题是当我过滤位置时,我仅从流locations.length中获得第一个结果时返回0,而Observable正在关闭。你能以某种方式纠正我吗?位置可能尚未加载。我要等待它们被加载到商店中,然后再检查参数。

canActivateChild(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
    return this.locationFacade.locations$.pipe(
      filter(locations => !!locations.length),
      map((locations: Array<Location>) => locations.some(x => x.name === next.params['locationName']))
    );
  }

1 个答案:

答案 0 :(得分:0)

我认为最好的解决方案是引入加载状态,而不是检查length。诸如此类:

canActivateChild(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
    return this.locationFacade.locations$.pipe(
      filter(locations => locations.state === 'LOADED'),
      map((locations: Array<Location>) => locations.some(x => x.name === next.params['locationName']))
    );
  }