2016-10-19 60 views
2

嘿,我已經嘗試過的代碼如下位:Angular2獲取路線的PARAMS與承諾

constructor(private _route: ActivatedRoute) {} 

ngOnInit() { 
    this._route.params.toPromise().then(data => { 
    ... 
    }) 
} 

但是它不會做anyhting。如果我用subscribe替換toPromise().then它工作正常。任何想法,爲什麼它不會工作?我在我的項目中的許多其他地方使用toPromise().then,它工作得很好。

回答

5

_route.params發出多個事件。當路由更改僅更改路由的參數值時,組件不會由路由器重新創建,而只會發射另一個值。

因此,使用toPromise()可能不是一個好主意,但它使用first()是可能的,例如,以便觀察到完成第一個事件,因此也被toPromise()完成返回的承諾後。

沒有.first()當您離開路線(未驗證)時,承諾完成。

constructor(private _route: ActivatedRoute) {} 

ngOnInit() { 
    this._route.params.first().toPromise().then(data => { 
    ... 
    }) 
} 

first需要導入。