2016-10-08 13 views
3

我正在翻閱Angular 2 tutorial about routing。在某些時候,他們添加路由/detail/:id並添加ngOnInit()方法來處理這條路線,特別是,以獲得:id參數:爲什麼他們在這個Angular教程中循環路由參數?

ngOnInit(): void { 
    this.route.params.forEach((params: Params) => { 
    let id = +params['id']; 
    this.heroService.getHero(id) 
     .then(hero => this.hero = hero); 
    }); 
} 

我不明白的是爲什麼他們在循環路徑參數的部分?由於只能有一個ID,是不是可以使用this.route.params['id']

另外,如果確實有多個ID,那麼每個新的英雄只會替換前一個,因此在他們身上循環點會是什麼?

+0

我不認爲它通過params循環。 – micronyks

回答

1

當路由中,只有參數的變化的方式改變(例如id/somepath/:id/otherPath),則路由器不離開導航並返回到相同的組件,但保持相同的組件併發出參數更改事件。

對於每個事件(params:Params) => { ... }被執行。

0

要檢索單編號,你也可以用這個,

let id = +this.route.snapshot.params['id']; 
1

現在你可以做這樣的:從rxjs

import 'rxjs/add/operator/switchMap'; 

首次進口switchMap然後

this.route.params 
    .switchMap((params: Params) => this.heroService.getHero(+params['id'])) 
    .subscribe(hero => this.hero = hero); 
0

你可能已經知道這個了,不過我覺得你需要得到的概念是, params不是一個數組,它是一個Observable。

console.log(this.route.params['id']); // undefined 
this.route.params.forEach(x => console.log(x['id'])); // the id e.g 999 

正如其他人所說,有各種方式來獲得使用快照時,ID只是要小心,因爲當部件被重新使用也不會更新。