2016-12-30 78 views
6

我有一個參數的路由,當去頁/用戶/ 123其中123是參數ngOnInit被調用,我得到我的參數,我打電話給我的方法來獲取用戶。Angular 2:路由參數發生變化,重新加載同一頁面?

但是,當我在該頁面上,然後單擊第二個鏈接/ users/456時,不再調用ngOnInit(因爲該頁面已經實例化)。因此,如果沒有ngOnInit,我無法獲取路由參數,也無法調用我的方法來獲取用戶。

如果我去/ users/123,然後到/ home,然後到/ users/456,它顯然工作。

我必須使用什麼來確保獲取參數並獲取用戶的函數始終被調用,即使我已經在同一頁上?

回答

9

您可以使用用戶route.params聽帕拉姆的更改。

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

export class DemoPage { 
    constructor(private _route: ActivatedRoute) { } 
    ngOnInit() { 
      this._route.params.forEach(params => { 
        let userId = params["userId"]; 
        //call your function, like getUserInfo() 
      }) 
    } 
} 
1

OnInit僅在實例化指令時被調用一次。

對於手錶路徑參數使用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:ActivatedRoute - ts - API

0

好的抱歉,傢伙,我打電話給我的get用戶以外的activatedRoute回調。

這是正確的:

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'; 
相關問題