Angular 7 Route Guards仍更改URL

时间:2019-02-21 15:03:21

标签: angular url router angular-guards

我的应用程序无法在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以阻止我访问某个屏幕时,顶部的网址都会被更改。换句话说,如果我在“ somepath”上,而在无法访问时尝试访问“ anotherpath”,则顶部网址会更改为

localhost:4200 /

localhost:4200 / somepath

为什么会发生这种情况,我该怎么做才能防止URL更改发生?

0 个答案:

没有答案