2016-10-19 21 views
2

とルートののparamsを取得ねえ、私がしようとしたその次のコードビット:それはanyhtingを行いません。しかしAngular2は約束

constructor(private _route: ActivatedRoute) {} 

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

。私がtoPromise().thensubscribeを入れ替えても問題ありません。それがうまくいかない理由は何ですか?私はtoPromise().thenを私のプロジェクトの他の多くの場所で使用しています。うまく動作します。

答えて

5

_route.paramsは、複数のイベントを発生します。ルート変更がルートのパラメータ値のみを変更する場合、そのコンポーネントはルータによって再作成されず、代わりに別のparams値が出力されます。

したがってtoPromise()を使用すると、おそらく良いアイデアではありませんが、それは可能だが、例えばまたそのためfirst()ように観察最初のイベントの後に完了し、toPromise()完了によって返された約束を使用します。

.first()が指定されていないと、ルートから離れると(約束していない)約束が完了します。

constructor(private _route: ActivatedRoute) {} 

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

firstをインポートする必要があります。