【发布时间】:2021-12-02 02:21:14
【问题描述】:
我的路由模块无法正常工作,而在 CanActivate 中添加 AuthGuard 会使它更加复杂。这是一个简化的路由器:
const routes: Routes = [
{
path: 'login',
component: LoginComponent,
},
{
path: 'home',
component: HomeComponent,
},
{
path: 'secret',
component: SecretComponent,
canActivate: [ AuthGuard ]
},
{ path: '', redirectTo: '/home', pathMatch: 'full' },
];
使用当前的设置,我得到了一些奇怪的行为。每条路由都被认为是path: '' 路由的子路由,所以去 '' 会把你带到 '/home'。如果我刷新页面,我会转到“/home/home”。这也适用于登录 - 导航到“/login”实际上会将您带到“/login/home”。如果在将额外的“/home”附加到末尾后刷新这些页面中的任何一个,则会导致页面出错。
authguard 只是另一个复杂功能,它根据身份验证状态导航用户。
我尝试过的事情:
- 删除 authguard
- 更改路径声明的顺序
- 只有一个路径 + 空白路径重定向到它
pathMatch: 'prefix'- 使用 '**' 作为重定向路由
- 升级到 Angular 12
- 删除/重新创建整个路由模块
我将其与一些正常运行的生产项目、示例教程等进行比较。一切似乎都已到位。不知道出了什么问题。
注意:该项目在 Angular 9 中出于某种原因,我刚刚注意到,即使我最近才完成它。可能值得尽早更新,但我认为这与问题无关。
更新:我更新到 Angular 12,它没有任何效果。实际上我注意到没有路线在工作。所以导航到 /secret 或 /login 什么都不做。
这是一个新的配置:
const routes: Routes = [
{
path: 'login',
component: LoginComponent,
},
{
path: '',
component: HomeComponent,
},
{
path: 'secret',
component: SecretComponent,
canActivate: [ AuthGuard ]
},
];
使用该布局,我可以导航到 '' 并看到 home 组件。如果我导航到“/login”,我会看到 home 组件。如果我单击调用this.router.navigate(['/', 'login']); 的按钮,则页面现在位于“/login”并显示登录组件。如果我刷新那个页面,我就会看到 home 组件,同时仍然在之前显示登录组件的同一条“/login”路径上。我很困惑。
每当我导航到某个路由时,例如“localhost:4200/login”,它都会将 URL 更改为“localhost:4200/login/”。如果我使用该 url 刷新或在末尾使用斜杠重新导航到该 url,我会在控制台中看到许多 404 错误,并且应用程序模板中没有任何内容加载。(例如页脚组件。)
更新 2: 我创建了一个新的 Angular 项目,并且具有基本完全相同的路线设置,并且一切都按预期运行。我不知道只是重新创建所有内容是否是正确的下一步,但这看起来非常诱人。
【问题讨论】:
-
Routes的使用情况如何,即您能否展示您的 RoutingModule 的样子? -
路由模块基本看我上面贴的样子。导出的方式基本就是:
@NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule { }然后导入到app模块中。 -
根据您的第二次更新,您的第一个项目中的设置有误,但根据您显示的所有信息似乎都正确,我无法弄清楚它是什么。此时我可能会将工作项目提交到源代码控制,然后开始从非工作项目中拖动组件。
标签: angular router auth-guard