2016-06-01 2 views
4

В Angular 2 Я хотел бы определить два маршрута, которые используют один и тот же компонент, но один маршрут является особым случаем с использованием специального заданного параметра. Теперь то, что я хочу сделать, это его:Angular2 два маршрута к одному компоненту?

@RouteConfig([ 
    { path: '/', name: 'Home', component: HomeComponent }, 
    { path: '/user/:id', name: 'User', component: UserComponent }, 
    { path: '/special-user', name: 'User', component: UserComponent, params:{'userId':'123'} }, 
]) 

Что мне нужно «Титулы» в последнем маршруте четкостью до «/ специального пользователя». Это вообще возможно?

Edit: в пути/пользователь /: ид ид является частью адреса, но в специальном-пользовательском случае, я хотел бы для ид быть невидимым и не быть частью адреса

ответ

3

Я нашел ответ в этой статье:

https://auth0.com/blog/2016/01/25/angular-2-series-part-4-component-router-in-depth/1

настроить маршрут

@RouteConfig([ 
    { path: '/myroute', component: MyComponent, name: 'MyRoute', data: { isAdmin: true } } 
]) 

внутри компонента:

import {RouteData} from 'angular2/router'; 

export class MyComponent { 
    isAdmin: boolean; 

    constructor(data: RouteData) { 
    this.isAdmin = data.get('isAdmin'); 
    } 
} 
+1

PS: - больше нет имени при использовании маршрутизации в угловом2 RC –

+0

Для ** Angular2 Release ** вместо 'RouteData' вам нужно' ActivatedRoute'. Таким образом, конструктор будет выглядеть так: 'constructor (data: ActivatedRoute) {this.isAdmin = !! data.snapshot.data ['isAdmin']; } '. Советую использовать !! как трюк для преобразования чего-либо (в том числе неопределенного) в boolean –

6

Угловое 2 Beta.x

Определить маршрут, как

@RouteConfig([ 
    ... 
    { path: '/special-user/:userId', name: 'SpecUser', component: UserComponent} 
]) 

Использование

внутри шаблона

[routerLink]="['SpecUser', {userId:123}]" 

внутри компонента

export class SomeComponent { 
    constructor(private router: Router) {} 

    someMethod() { 
    this.router.navigate(['SpecUser', {userId:123}]); 
    } 
} 

Угловое 2 RC

Определить маршрут, как

@Routes([ 
    ... 
    { path: '/special-user/:userId', component: UserComponent} 
]) 

Использование

внутри шаблона

[routerLink]="['/special-user', 123]" 

внутри компонента

export class SomeComponent { 
    constructor(private router: Router) {} 

    someMethod() { 
    this.router.navigate(['/special-user', 123]); 
    } 
} 
+0

Спасибо за ваш ответ! Есть ли способ URL-адреса «www.example.com/special-user» использовать userID = 123 без указания его в URL-адресе, а скорее в контроллере. Я хочу, чтобы URL-адрес был довольно без идентификатора в качестве параметра get –

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