Angular 7 Route Guards все еще меняют URL - PullRequest
0 голосов
/ 21 февраля 2019

Мое приложение не может отображать изменения на экране адреса 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-адрес изменяется с

localhost: 4200 /

на

localhost: 4200 / somepath

Почему это происходит и что я могу сделать, чтобы предотвратить изменение URL-адреса?

...