2016-10-14 159 views
13

我有一個<a>標籤像下面,角2 - 參數傳遞給路由

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

所以我想給person.id傳遞給該/Person路由器。我怎樣才能將它傳遞&處理它@RouteConfigparams在角1

+0

沒有'@ RouteConfig'。你使用的是什麼Angular2版本? –

回答

21

通行證到路由器鏈路:在組件

<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(); 
    } 
} 

配置

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

此外,@RouteConfig棄用

+1

很好的答案,幾條評論。首先,你錯過了「/ Person''中的開頭單引號。其次,根據[路由和導航](https://angular.io/docs/ts/latest/guide/router.html#!#route-parameters),你可以像這樣訪問參數: 'ngOnInit (){(params:Params)=> { let id = + params ['id']; //(+)將字符串'id'轉換爲數字 });'' 最後,如果您使用訂閱,請記得在ngOnDestroy上取消訂閱。 – jjokela

+0

感謝您關注單引號 - 我編輯過的帖子。關於取消訂閱 - 這是顯而易見的。做到這一點很重要,以防止內存泄漏。我將其添加到回答:) –

+0

**手柄組件:** 'this.route.params.subscribe( (PARAMS:PARAMS)=> { this.id =參數[ 「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]); 
    } 

}