如何限制Angular2路由参数?

时间:2016-12-12 13:04:48

标签: angular routing

鉴于这个简单的路由示例,我希望能够限制:page参数。

const appRoutes: Routes = [
  { path: ':page', component: PageFoundComponent },
  { path: '**', component: PageNotFoundComponent }
];

最好使用字符串数组。此处的预期行为是检查:page是否为Array元素之一,如果不存在,则路由到PageNotFoundComponent

// pseudo code
let knownPages = ["welcome", "shop", "about"];
(...)
{ path: ':page@knownPages', component: PageFoundComponent }

这个概念来自Symfony2路由机制。

我该如何接近它?

2 个答案:

答案 0 :(得分:2)

您可以使用最近推出的自定义UrlMatcher

{ path: ':page', component: PageFoundComponent, matcher: ... },

但我还没有找到任何关于它的文档。

另见https://angular.io/docs/ts/latest/api/router/index/Routes-type-alias.html

答案 1 :(得分:1)

您需要使用路由器Guards。具体而言,可能是CanActivate Guard



import { AuthGuard }                from '../auth-guard.service';

const adminRoutes: Routes = [
  {
    path: ':page',
    component: Component,
    canActivate: [AuthGuard]
  }
];

@NgModule({
  imports: [
    RouterModule.forChild(adminRoutes)
  ],
  exports: [
    RouterModule
  ]
})
export class RoutingModule {}




请注意,您可以使用多个警卫。如果路径在数组中,则可以返回true,一个可以与身份验证相关,一个可以与角色相关等。