2016-12-30 18 views
6

page/users/123に行くときにパラメータ付きのルートがあります。ここで123はngOnInitが呼び出されたパラメータです。パラメータを取得し、メソッドを呼び出してユーザーを取得します。角度2:ルートパラメータの変更、同じページをリロードしますか?

しかし、私がそのページにいて、2番目のリンク/ users/456をクリックすると、ngOnInitはもう呼び出されません(そのページはすでにインスタンス化されているため)。だからngOnInitなしで私はルートパラメータを取得することはできませんし、私のメソッドを呼び出すことはできません、ユーザーを取得します。

私は/ users/123、/ home、/ users/456に行くと、明らかに動作します。

パラメータを取得してユーザーを取得する関数が、同じページにある場合でも常に呼び出されるようにするにはどうすればよいですか?

答えて

1

OnInitは、ディレクティブがインスタンス化されたときに1回だけ呼び出されます。

ウォッチルートパラメータの場合はActivatedRouteを使用してください。

constructor(private route: ActivatedRoute) { } 

ngOnInit(): void { 
    this.route.params.forEach((params: Params) => { 
     console.log(params); // Your params called every change 
    }); 
} 

インポートすることを忘れないでください:

import { ActivatedRoute, Params } from '@angular/router'; 

はのOnInitについて詳しく読む:OnInit - ts - API

ActivatedRouteについて詳しく読む:あなたはのparamのを聞くために、加入者route.paramsを使用することができます

0

ごめんなさい、私はactivateRouteコールバックの外でget userを呼び出していました。

これは正しいです:私がやったこと

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

export class DemoPage { 
constructor(private _route: ActivatedRoute) { } 
ngOnInit() { 
     this._route.params.forEach(params => { 
       let userId = params["userId"]; 
       getUserInfo(userId); 
     }); 
    } 
} 

だった:

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

export class DemoPage { 
constructor(private _route: ActivatedRoute) { } 
ngOnInit() { 
     var userId = ""; 
     this._route.params.forEach(params => { 
      userId = params["userId"];                     
     }); 

     getUserInfo(userId) 
    } 
} 
4

のparamsが観察されます。ですから、観測値に一度登録するだけで、パラメータが変わるたびに通知を受けることができます。

constructor(private route: ActivatedRoute) {} 

ngOnInit() { 
    this.route.params 
    .switchMap((params: Params) => /* load your user e.g. getUser(params['id']) */) 
    .subscribe(user => this.user = user); 
} 

はまたActivatedRouteとPARAMS

import { ActivatedRoute, Params } from '@angular/router'; 
をインポートする必要があります
関連する問題