Как составить Angular Guard на основе данных хранилища NgRX - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь создать защиту, которая проверяет, отображается ли значение параметра маршрута в списке местоположений (который находится в хранилище 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 голосов
/ 12 декабря 2018

Вместо проверки на 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']))
    );
  }
...