angular - 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 就会更改。换句话说,如果我在“某个路径”上,并且在无法访问“另一个路径”时尝试访问,则顶部的 url 将从
本地主机:4200/
至
本地主机:4200/somepath
为什么会发生这种情况,我能做些什么来防止 URL 更改发生?
解决方案
推荐阅读
- hibernate - Spring JPA 一对多休眠插入数据与现有实体
- sql - PostgreSQL 双重等效查询
- memory - 有没有办法更好地管理我的 COBOL 程序中的数据使用情况
- php - 解析错误:语法错误,第 17 行 D:\OpenServer\OpenServer\domains\Internetstor\models\Category.php 中的意外 '$db' (T_VARIABLE)
- lua - 如何设置相机高度
- ios - 使用我的 WebKit 构建运行 Safari 无法正常运行
- powerbi - 与其他用户共享嵌入的 power Bi 报告
- html - 根据字体大小确定 div 的高度
- c# - Microsoft.Extensions.DependencyInjection 是否使用单例概念?
- python - 使用 JSON 为我的不和谐服务器创建调平系统