Here是我的作品。
我设置了一个保护措施,将请求URI / admin转发到/ login, 您可以参考/admin/admin.guard.ts了解详情。
工作正常。但是,当请求URI为/ admin / abc时,它将不起作用。
以下是/admin/admin-routing.module.ts的内容:
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AdminComponent } from './admin.component';
import { AdminGuard } from './admin.guard';
const routes: Routes = [
{
path: 'admin',
canActivate: [AdminGuard],
component: AdminComponent,
children: [
{
path: '',
redirectTo: 'admin',
pathMatch: 'full'
},
{
path: '**',
redirectTo: 'admin',
pathMatch: 'full'
}
]
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class AdminRoutingModule { }
如何解决此问题?
答案 0 :(得分:1)
使用绝对路径进行重定向:
const routes: Routes = [
{
path: 'admin',
canActivate: [AdminGuard],
component: AdminComponent,
children: [
{
path: '',
redirectTo: '/admin',
pathMatch: 'full'
},
{
path: '**',
redirectTo: '/admin',
pathMatch: 'full'
}
]
}
];
如果使用相对路径,则将存在无限循环的重定向。 从/ admin / 123到/ admin / admin到/ admin / admin,依此类推。
答案 1 :(得分:0)
您可能要检查在imports
的{{1}}下注册自定义角度模块的顺序。确保包含app.module.ts
的路由条目的模块在其他模块之后排在最后。
例如,在您的情况下,请继续在app.module.ts的末尾添加{ path: '**', ... }
:
AdminRoutingModule
@NgModule({
declarations: [ ... ]
imports: [
// Angular in-built modules
// Your custom modules
AdminRoutingModule
],
providers: [ ... ],
entryComponents: [ ... ],
bootstrap: [ AppComponent ]
})
表示当在应用程序中注册的现有路由没有找到匹配项时,URL的最终选项将被拒绝。还可以考虑在redirectTo属性中使用绝对路径,例如**
。
所以我不确定这是否可以解决您的问题,但是值得尝试一下!