我已经创建了Guards,以防止他们进入权限不足的网页。
但我想知道,为什么我被迫在每条路线上添加卫兵。我认为第一条路线上的守卫应该足够孩子们懒得加载。但事实并非如此。我做错了什么,或者这是Angular的工作原理?
app.routing.ts
export const routes: Routes = [
{ path: "", component: HomeComponent },
{ path: "groups", loadChildren: "app/main/main.module#MainModule",
canLoad: [AuthCanLoadGuard] } // <-- guard on first route
];
儿童:
main.routing.ts
export const routes: Routes = [
{ path: "groups", component: GroupListComponent, canActivate: [AuthGuard] },
{ path: "groups/:id/category", component: CategoryComponent, canActivate: [AuthGuard] },
{
path: "groups/:id/category", component: GroupSummaryComponent, children: [
{ path: "bikes", canLoad: [AuthCanLoadGuard], loadChildren: "app/features/bikes/bikes.module#BikesModule" },
{ path: "cars", canLoad: [AuthCanLoadGuard] loadChildren: "app/features/cars/cars.module#CarsModule" },
]
}
];
正如你在 main.routing.ts 中看到的那样,我必须为所有路线添加防护装置以使其正常工作。那是为什么?
编辑:
我已经调试过,似乎没有进入MainModule的AuthCanLoadGuard。但是对于BikesModule和CarsModule工作正常。但我不知道为什么......
编辑2:
问题解决了。问题在于路线配置。
确保您没有将MainModule导入AppModule(这就是为什么我可以在 main.routing.ts 中的路径中groups
的原因是什么因为父母已经group
已经错误
Main.Module中的RouterModule.forRoot应为forChild
答案 0 :(得分:1)
尝试使用canActivateChildren。我不确定canLoad的用途是什么,从未使用它。
编辑:你的孩子路线看起来也不错。他们不应该使用“群组”加注星标,因为该部分会在父级中被捕获。所以在main.routing { path: "groups",
应该是{ path: "",
等