【发布时间】:2020-02-26 08:51:40
【问题描述】:
我使用 Angular Guard 来保护我的路由,我在主路由中添加 canActivate attr 并且它工作正常,而对于子单路由(ReportsRouteModule/RequestsRouteModule...),如果我想启用守卫,我还需要在每条路线中设置 canActivate ,我认为使用角度守卫是一种不好的方式,而且会浪费很多时间。那么有什么办法可以避免它并在主路由中管理它。
请看我的应用结构和一些代码如下: 1. 应用结构:
|-- app.module.ts
|-- app-routing.module.ts(master route)
|-- app.component.ts
|-- report
|-- report-route.module.ts(sub route)
|-- report-aa
|-- report-bb
|-- report-cc
|-- request
|-- request-route.module.ts(sub route)
|-- request-aa
|-- request-bb
|-- request-cc
|-- etc.
- 代码: 主路线
const routes: Routes = [
{path: '', redirectTo: 'home', pathMatch: 'full'},
{path: 'home', component: HomeComponent, canActivate: [AuthGuard]},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
// providers: [AuthGuard]
})
export class AppRoutingModule {
子路线:
const routes: Routes = [
{
path: 'reports',
canActivateChild: [AuthGuard],
children: [
{path: '', redirectTo: 'reports', pathMatch: 'full'},
{path: 'A', component: AReportsComponent},
{path: 'B', component: BReportsComponent},
{path: 'C', component: CReportsComponent},
]
}
];
@NgModule({
imports: [
RouterModule.forChild(routes),
],
declarations: [
AReportsComponent,
BReportsComponent,
CReportsComponent,
]
})
export class ReportsRouteModule {
}
【问题讨论】:
-
请同时发布您的 authguard。
标签: angular angular-router-guards canactivate canactivatechild