我的应用程序无法在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更改发生?