2016-10-14 11 views
13

にパラメータを渡すだから私はこの/Personルータにperson.idを渡したいです。コンポーネントには2角度 -</p> <pre><code><a [routerLink]="[/Person']">Person</a> </code></pre> <p>、私は以下のように<code><a></code>タグを持っているルート

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

ハンドル:私はそれが角1

+0

何の '@ RouteConfig'はありません。どのAngular2バージョンを使用していますか? –

答えて

21

パスようにそれを渡すことができます:

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

第二の方法:あなたは(ルートプロパティとしてなど)ActivatedRouteを注入する必要がある。この例では

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

ような:

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''に一重引用符をつけていません。 第2に、[Routing and Navigation](https://angular.io/docs/ts/latest/guide/router.html#!#route-parameters)に従って、次のようなパラメータにもアクセスできます。 'ngOnInit { this.route.params.forEach(params:Params)=> { let id = + params ['id']; //(+)は文字列 'id'を数値 に変換します)} ' 最後に、subscribeを使用している場合は、ngOnDestroyの登録を解除することを忘れないでください。 – jjokela

+0

一重引用符に気をつけてくれてありがとう - 私は編集した投稿。退会について - これは明らかです。メモリリークを防ぐには、それを行うことが重要です。** 'this.route.params.subscribe( (paramsは:I **は答えるため:) –

+0

をコンポーネントにハンドルを追加するPARAMS)=> { this.id =用のparams [ "IDが"]; } );これは、ユーザーがナビゲートされるクラス、つまりngOnInit()メソッドでwritternされます。右? –

4

paramsよう@RouteConfigにそれを扱う&渡すことができますどのようにリンクをルータに

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

} 
関連する問題