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