2016-12-29 8 views
1

ボタンクリックでonDo()を発生させると、値が変数に購読値を割り当てる:Angular2

{{getData}}

になるコンポーネントがあります。 onDo()はサーバーへのGET要求を開始しています。

サーバーが応答を返すと、私はそれを購読しています。購読された値をthis.getDataに割り当てて、{{getData}}を使用してコンポーネントテンプレートに正常に表示できるようにしています。 .subscribe()内のコンソールでデータの印刷を取得することもできます。 しかし、私は.subscribe()の外で印刷しようとしましたが、何も表示されません。

私が実際にやりたいことは、getDataの値をMyVarに割り当てます。

data => this.getData = JSON.stringify(data), 

は、データがサーバから到着したときに呼び出されるsubscribe(...)に渡される関数です

@Component({ 


template: ` 

... 

<p>{{getData}}</p> 

... 

`, 

providers: [MyService] 

}) 

export class MyComponent{ 

    getData: string; 
    MyVar: string; 

    constructor(private _myService: MyService, private _router: Router){} 

    onDo(){ 

     this._myService.getSomething() 
      .subscribe(
       data => this.getData = JSON.stringify(data), 
       error => this._router.navigate(['error']), 
       () => console.log('Get data inside subscribe: '+ this.getData) 
       ); 

      console.log('Get data outside subscribe'+this.getData); 
      this.MyVar = this.getData; 

    } 

} 
+1

[非同期呼び出しからの応答を返すにはどうすればよいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-コール) – echonax

答えて

1

このコード: はここに私のコードです。

上記の関数がsubscribeに渡された直後にconsole.log(...)が呼び出されますが、データが既に存在するとは限りません。

コードをsubscribe(...)に移動するだけで、正常に動作します。

+0

サブスクライブは3つのパラメータのみをサポートしています。ここで太い矢印はdata =>、error =>、()=>であり、私はそれらのそれぞれを別のものに使用しています。今、どこに、どのように私は式を置く必要があります: "this.MyVar = this.getData;" ? –

+0

'{} 'を' data => {this.getData = JSON.stringify(data);のように追加します。その他のステートメントここにあります。 } 'を使用すると、必要なだけ多くのコードを追加できます。 –

関連する問題