Angular 7 Route Guards все еще меняют URL
Мое приложение не может показать изменения на экране адреса URL. Прямо сейчас мое приложение лежит на localhost:4200/, и все. Поэтому я потратил время на то, чтобы мои навигационные ссылки отключили изменение местоположения:
<a [routerLink]="[screenPath]" skipLocationChange>
И у меня есть одно централизованное расположение в службе, которая обрабатывает маршрутизацию, когда необходимо изменение экрана:
if (route) {
this.router.navigate([newRoute], {relativeTo: route, skipLocationChange: true});
} else {
this.router.navigate([newRoute], {skipLocationChange: true});
}
В моем основном модуле маршрутизации приложений я пропускаю начальную навигацию:
@NgModule({
imports: [RouterModule.forRoot(routes, {initialNavigation: false})],
....
})
И в моих дочерних маршрутах, где происходит моя навигация, у меня есть средства защиты, чтобы предотвратить определенную навигацию, основанную на определенных условиях:
const routes: Routes = [
{ path: 'somepath', component: SomeFormComponent, canActivate: [WorkFlowGuard] },
{ path: 'anotherpath', component: AnotherFormComponent, canActivate: [WorkFlowGuard]},
....
];
И мой WorkFlowGuard возвращает простое логическое значение, чтобы определить, разрешен путь или нет:
canActivate(next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean
{
// GRAB CURRENT PATH AND VERIFY
const path = next.routeConfig.path;
console.log(`GUARD - verify path: '${path}'`);
const allow = this.verifyWorkFlow(path);
return allow;
}
Когда я могу получить доступ к экрану или перейти к следующему экрану с помощью кнопки формы, URL-адрес до НЕ изменяется, и это здорово! Однако каждый раз, когда WorkFlowGuard активируется и возвращает false, чтобы я не смог получить доступ к определенному экрану, верхний URL-адрес изменяется. Другими словами, если я нахожусь на 'somepath' и пытаюсь получить доступ к ' anotherpath', когда я не могу, URL-адрес вверху меняется с
локальный: 4200 /
в
локальный:4200/somepath
Почему это происходит и что я могу сделать, чтобы предотвратить изменение URL-адреса?