2016-10-06 6 views
1

ActivatedRouteから降りて約束したが、運がなかったparamsについてobservableを回そうとしています。Angular2 - 'activatedRoute.params'を約束に変えよう

this.riaService.getAdvisorsForState(this.activeState) 
    .then(rias => { 
     this.riasForState = rias.json(); 
     console.log(this.riasForState); 
    }); 
// this all works^

しかし、私は約束に「activatedRoute.params」を回すことができていない:私は成功した約束にhttp要求をオンにすることができました

export class InvestmentAdvisorStateComponent implements OnInit { 

    constructor(private activatedRoute: ActivatedRoute, private riaService: InvestmentAdvisorService) { } 

    getStateFromUrl() { 
     this.activatedRoute.params 
      .toPromise() 
      .then(params => { 
       console.log('HERE',params) 
      }); 
    } 
// this does not work for me^

これは私が右の持っているものです今:約束はそう思ったとして

getStateFromUrl() { 
    this.activatedRoute.params 
     .subscribe((param: any) => { 
      this.activeState = param['state']; 
     }); 
} 
// works^

私は私がこれを実装することのオフ.thenをすることができます期待しています。どのようにこれを行うにはどんな助けにも大変感謝しています。

+0

どのような動作が期待されますか?この約束は、サーバーからの応答が到着したときに 'http.get()'が完了している間に、そのルートから遠ざかるときに完了するのではないでしょう。 –

+0

@GünterZöchbauerああ、私はそれを実現しませんでした。私は '.subscribe'で今持っている機能を表示するために投稿を編集しました。私は私の観察可能性を約束に変えようとしているので、 '.then'と連鎖することができます – georgej

+0

なぜ' .map() 'だけではないのですか –

答えて

5

観測可能と約束の主な違いは、観測可能なものは複数のイベントを放出でき、約束は単一のイベントのみを放出することです。

あなたの例を効果的にするために、最初のイベントだけに興味があると思います。

getStateFromUrl() { 
    this.activatedRoute.params 
     .first() 
     .toPromise() 
     .then(params => { 
      console.log('HERE',params) 
     }); 
} 

toPromise()で作成した約束は最初paramsイベントで完了しているこの方法です。

+1

すごい人です。本当にそれを感謝します – georgej

+1

素晴らしいアンサー。私はそれを追加して、あなたが 'public async ngOnInit(){let params = this.activatedRoute.params.first()。toPromise()を待つような、もっとシンクライクなようなコードを取得します。 console.log( 'pppp'、params); } ' –

関連する問題