Угловой метод canActivate guard не имеет доступа к правильному снимку маршрутизатора - PullRequest
0 голосов
/ 20 июня 2019

У меня странная проблема с функцией защиты маршрутизации. Исходная информация заключается в том, что у меня есть три маршрута для навигации (скажем, A, B и C), которые имеют некоторые зависимости: имея всего одну кнопку next, он перемещается по процессу вперед в соответствии с некоторой внутренней логикой и шаг за шагом был просил. Чтобы эффективно управлять запросами маршрутизации в стороже, мне нужен как запрошенный URL-адрес, так и текущий, который был активен на момент разрешения навигации. Согласно бесчисленным предложениям в Интернете, как этого добиться, появился следующий код:

@Injectable()
export class WorkflowGuard implements CanActivate {
    public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
        const requestedPath: MoveinStepUrl = route.routeConfig.path;
        const currentPath: MoveinStepUrl = state.url.split('/').pop();
       /* Rest goes here */
    }
}

Проблема в том, что обе эти переменные указывают на новый запрошенный путь, например, когда запрашивается навигация от компонента A до B, оба значения requestedPath и currentPath разрешаются в B. Я просматривал дочерние свойства, чтобы собрать URL-адреса, и даже они указывают на новый путь. Похоже, что снимок состояния маршрутизатора был сделан после того, как навигация была решена ...

Есть идеи, что может быть причиной такого поведения?

Я не предоставляю более широкий контекст кода, потому что ничто из моей кодовой базы не может фактически влиять на внутренний вызов guard и параметры, которые передаются. Я не использую никаких наблюдаемых состояний маршрутизатора.

EDIT

И самое забавное из всех: когда я запрашиваю еще один снимок состояния маршрутизатора внутри сторожа (таким образом, с точки зрения временной шкалы, более новый), он фактически дает мне ожидаемый, текущий, а не запрошенный URL:

const newSnapshotPath = this.router.routerState.snapshot.url.split('/').pop()
// Gives `A` path
...