相同URL的不同RouterModule配置

时间:2016-10-05 12:03:44

标签: angular angular2-routing

考虑以下代码:

@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之外的重命名路径)?

1 个答案:

答案 0 :(得分:2)

路由器只是将url与配置路由的path参数进行比较。

它采用url开头匹配的第一个根路由,然后继续匹配根路由的子路由和url的剩余部分(匹配根的path的url)路线在开始时删除了)。 这将持续到剩余的URL为空并且不存在path: ''(空路径)的子路由。

一种方法是重新配置路由器(resetConfig()),例如当AuthGuard返回true时。