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-адреса?

0 ответов

Другие вопросы по тегам