考虑以下代码:
@NgModule({
imports: [RouterModule.forRoot([
{ path: 'about', component: AboutComponent },
{ path: '', loadChildren: 'app/admin.module#AdminModule', canLoad: [AuthGuard] },
{ path: '', component: HomeComponent, canActivate: [HomeGuard] },
])],
providers: [
AuthGuard, // return true if user is Authorized
HomeGuard // return true if user is NOT Authorized
]
})
export class AppRoutingModule { }
@NgModule({
imports: [RouterModule.forChild([
{ path: '', component: DashboardComponent, canActivate: [AuthGuard] },
{ path: 'account', component: AccountComponent, canActivate: [AuthGuard] },
])],
providers: [
AuthGuard, // return true if user is Authorized
]
})
export class AdminModule { }
当我使用:this.router.events.subscribe(console.log);
收听路由器事件时(如果我未获得授权),我可以看到NavigationCancel
事件并显示消息:
“无法加载子项,因为路由守护”路径:''“返回false”
如果我被授权RoutesRecognized
事件被触发,正如预期的那样。
据我了解,路由器会通过提供的路由并尝试识别活动路由。如果它确实识别了路线,则会检查防护装置,装载部件等。
仅限路径/网址吗?还是考虑其他任何参数?
是否有另一种解决方案(除了HomeComponent
之外的重命名路径)?
答案 0 :(得分:2)
路由器只是将url与配置路由的path
参数进行比较。
它采用url开头匹配的第一个根路由,然后继续匹配根路由的子路由和url的剩余部分(匹配根的path
的url)路线在开始时删除了)。
这将持续到剩余的URL为空并且不存在path: ''
(空路径)的子路由。
一种方法是重新配置路由器(resetConfig()
),例如当AuthGuard
返回true时。