1

在我的商店中有数据之前,我想拒绝用户进行路由。我尝试使用解析器,但它仍然会去路线并且我得到一个错误,因为我在状态效果中使用这些数据。我在网上搜索,但我没有看到将用户保留在解析器中的示例,直到数据被解析,我如何才能“保留”用户,直到我的商店中有必要的数据?

在此处输入图像描述

4

1 回答 1

0

使用一个canActivate或一个canLoad守卫。Todd Motto 有一篇关于如何使用 Route Guards 预加载 ngrx/store的文章

@Injectable()
export class CoursesGuard implements CanActivate {
  constructor(private store: Store<CoursesState>) {}

  getFromStoreOrAPI(): Observable<any> {
    return this.store
      .select(getCoursesState)
      .do((data: any) => {
        if (!data.courses.length) {
          this.store.dispatch(new Courses.CoursesGet());
        }
      })
      .filter((data: any) => data.courses.length)
      .take(1);
  }

  canActivate(): Observable<boolean> {
    return this.getFromStoreOrAPI()
      .switchMap(() => of(true))
      .catch(() => of(false));
  }
于 2019-01-20T14:20:29.490 回答