2016-12-29 161 views
1

如果我通过单击按钮触发onDo(),我有一个组件显示的值为将订阅值分配给变量:Angular2

{{getData}}

。 onDo()正在向服务器发起GET请求。

服务器回馈的反应,我订阅了。我将订阅值分配给this.getData,并能够使用{{getData}}在我的组件模板中成功显示它。 我还可以在控制台内的.subscribe()中打印数据。 但我想打印的.subscribe()之外,它不显示任何内容。

我真正想要做的是:分配的getData的价值MYVAR。 这里是我的代码:

@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

此代码

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

是传递到subscribe(...)一种功能,当数据从服务器到达时被调用。

您上面的函数传递给subscribe后立即调用您的console.log(...),但这并不意味着数据已经存在。

只是移动代码中subscribe(...)如预期它会奏效。

+0

该订阅仅支持三个参数。这里是数据=>,错误=>,()=>的胖箭头,我将其中的每一个用于别的东西。现在,在哪里,我应该如何表达:“this.MyVar = this.getData;” ? –

+0

添加'{}''像数据=> {this.getData = JSON.stringify(数据); otherStatementsHere; }',那么你可以根据需要添加尽可能多的代码。 –