2016-12-12 3 views
2

Учитывая этот простой пример маршрутизации, я хотел бы иметь возможность ограничить аргумент :page.Как ограничить параметры маршрутизации Angular2?

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

Предпочтительно с массивом строк. Ожидаемое поведение здесь состоит в том, чтобы проверить, что :page является одним из элементов массива и направляется на PageNotFoundComponent, если его там нет.

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

Концепция взята из механизма маршрутизации Symfony2.

Как подойти к нему?

ответ

1

Вы можете использовать пользовательские UrlMatcher, которая была введена недавно

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

, но я не нашел каких-либо документы об этом еще.

Смотрите также https://angular.io/docs/ts/latest/api/router/index/Routes-type-alias.html

+2

Я нашел здесь пример: https://angular.io/api/router/UrlMatcher – Frank

0

Вы хотите использовать маршрутизатор 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, если путь находится в массиве, можно было бы связать с аутентификацией, можно было бы связать с ролями и т. Д.

Смежные вопросы