Как запретить переключение маршрута, пока данные не будут сохранены с помощью ngrx и разрешены?

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

https://stackru.com/images/cd3518c2c85408d13ab bb4b459978c5b0aa01d15.png

1 ответ

Решение

Использовать 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));
  }
Другие вопросы по тегам