canActivate()路由保护返回true但不路由未加载

时间:2018-06-08 10:58:03

标签: angular rxjs ngrx

我使用路由保护从NgRX商店获取数据,并在路由解析之前触发(如果需要)API请求以从商店加载它。基本上我们等待实体在商店中定义,并且对于布尔标志将其标记为已完成加载,然后observable发出true并且路由应该解析。

然而,尽管在canActivate()成功发射的情况下可观察到,但该路线并没有加载,我认为没有理由这样做。在此之前,流的行为与预期一致:第一个loaded为false,实体为undefined。然后,一旦API调用完成,实体就会被定义,最后loaded布尔值变为true。过滤器然后允许我们通过和负载pls' console.log显示一次。此时,路线现在应该加载吗?

  canActivate(): Observable<boolean> {
    return this.getEntity().pipe(
      switchMap(() => {
        console.log('load pls');
        return of(true);
      }),
      catchError(() => of(false)),
    );
  }

  getEntity(): Observable<boolean> {
    return combineLatest([this._store.select(getActiveEntity), this._store.select(getActiveEntityLoaded)]).pipe(
      map(latest => {
        const [entity, loaded] = latest;
        if (!entity) {
          this._store.dispatch(new GetItemRequest());
        }

        return loaded;
      }),
      filter(loaded => loaded),
      take(1),
    );
  }

(我意识到布尔loaded在这里是多余的,但无论如何我都无法做到这一点)

0 个答案:

没有答案