鉴于这个简单的路由示例,我希望能够限制: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路由机制。
我该如何接近它?
答案 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,一个可以与身份验证相关,一个可以与角色相关等。