canActivate () охранник маршрута возвращает true, но не загружает маршрут - PullRequest
0 голосов
/ 08 июня 2018

Я использую средство защиты маршрута для извлечения данных из хранилища NgRX и запускаю (если требуется) запрос API для загрузки их из хранилища до разрешения маршрута.По сути, мы ждем, когда сущность будет определена в хранилище, а логический флаг отметит ее как завершенную загрузку, тогда наблюдаемое излучает true, и маршрут должен разрешиться.

Однако, несмотря на наблюдаемое в canActivate() успешно излучает, маршрут не загружается, и я не вижу причин для этого.До этой точки поток ведет себя как ожидалось: сначала loaded ложно, а сущность undefined.Затем, после завершения вызова API, сущность становится определенной, и, наконец, логическое значение loaded становится true.Затем фильтр пропускает нас, и файл console.log «load pls» отображается один раз.На данный момент, конечно, маршрут должен теперь загрузить?

  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 здесь довольно избыточно, но я не могу заставить это работать независимо от этого)

...