как запретить переключение маршрута, пока данные не будут сохранены с помощью ngrx и разрешены? - PullRequest
0 голосов
/ 20 января 2019

Я хочу отказать пользователю в получении доступа к маршруту, пока у меня нет данных в моем магазине. я попытался с решателем, но он все еще идет к маршруту, и я получаю ошибку, потому что я использую эти данные в состоянии эффекта. Я искал в Интернете, но я не вижу пример, который удерживает пользователя в распознавателе, пока данные не будут разрешены как я могу «держать» пользователя, пока у меня не будут необходимые данные в моем магазине?

enter image description here

1 Ответ

0 голосов
/ 20 января 2019

Используйте canActivate или canLoad охрану.У Тодда Мотто есть статья о том, как это сделать Предварительная загрузка ngrx / store с помощью Route Guards

@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));
  }
...