2016-10-14 2 views
13

У меня есть <a> тег, как показано ниже,Угловые 2 - параметры Пасс в пути

<a [routerLink]="[/Person']">Person</a> 

Так что я хочу передать person.id к этому /Person маршрутизатору. Как я могу передать его & обрабатывать его на @RouteConfig как params в угловых 1

+0

Там нет '@ RouteConfig'. Какую версию Angular2 вы используете? –

ответ

21

Pass к маршрутизатору ссылке:

<a [routerLink]="['/Person', person.id]">Person</a> 

Ручка в компоненте :

this.route.params.subscribe(
    (params : Params) => { 
     this.id = params["id"]; 
    } 
); 

Второй способ:

this.route.params.forEach(
    (params : Params) => { 
     this.id = params["id"]; 
    } 
); 

В этом примере вы должны вводить ActivatedRoute (например, как маршрут собственности) так:

constructor(private route : ActivatedRoute) {} 

Если вы подписались - это очень важно отказаться от подписки Observable для предотвращения утечки памяти.

Полный пример:

export class SimpleComponent implements OnInit, OnDestroy { 
    private id : number; 
    private route$ : Subscription; 
    constructor(private route : ActivatedRoute) {} 

    ngOnInit() { 
     this.route$ = this.route.params.subscribe(
      (params : Params) => { 
       this.id = +params["id"]; // cast to number 
      } 
     ); 
    } 
    ngOnDestroy() { 
     if(this.route$) this.route$.unsubscribe(); 
    } 
} 

Config:

export const routes = [ 
    ... 
    { path : 'Person/:id', component : ...}, 
    ... 
]; 

Кроме того, @RouteConfig является устаревшим.

+1

Хороший ответ, пара комментариев. Во-первых, вам не хватает первой кавычки в «/ Person». Во-вторых, в соответствии с [Маршрутизация и Навигация] (https://angular.io/docs/ts/latest/guide/router.html#!#route-parameters) вы также можете получить доступ к таким параметрам: 'ngOnInit() { this.route.params.forEach ((params: Params) => { let id = + params ['id']; // (+) преобразует строку 'id' в число }); ' Наконец, если вы используете подписку, не забудьте отказаться от подписки на ngOnDestroy. – jjokela

+0

Спасибо за ваше внимание к отдельной цитате - я отредактировал сообщение. Об отказе от подписки - это очевидно. Это важно для предотвращения утечек памяти.Я добавлю это ответить :) –

+0

** Ручка в компоненте: ** 'this.route.params.subscribe ( (Титулы: Params) => { this.id = Params [ "ID"]; } ); эта вещь будет написана в том классе, в котором пользователь будет перемещаться, то есть в свой метод ngOnInit(). Правильно? –

4

Вы можете передать его как

<a [routerLink]="[/Person', propertyWithId]">Person</a> 
1

В моем случае директива [routerLink] не работала для меня. Поэтому мне пришлось делать это программно.

шаблон компонента:

<a (click)="goToEdit(person.id)" >Edit</a> 

Компонент Класс:

import { Router } from '@angular/router'; 

export class PersonComponent{ 

    constructor(private _route: Router){ } 

    goToEdit(id){ 
     this._route.navigate(['Person/' + id]); 
    } 

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