将数据分配给组件中的变量,以便可以在角度2中的组件内的任何位置使用它

时间:2018-04-03 12:10:15

标签: angular typescript components angular2-services angular2-directives

我在angular 2项目中有一个函数,它通过api从数据库中获取数据。我创建了以下函数,将数据成功存储在变量" ReqData "已被指定为类型" 任何 "。

 this._visitService.getchartData().subscribe(data =>
{ this.ReqData = data
  console.log("ISubscribe", this.ReqData );

});
console.log("OSubscribe", this.ReqData );
this.ImpoData = this.getData( this.ReqData);

但问题是虽然数据可以在订阅中成功传递,但调用subscribe之外的值会给出输出 undefined 。有没有办法在订阅之外使用数据。

1 个答案:

答案 0 :(得分:2)

实际上,this.ReqData已经可以在组件中的任何位置访问。但是你只需要确保只在调用了subscribe中的代码之后才调用它,这是this._visitService.getchartData()检索数据的时候。这是因为订阅内的代码将异步执行。

如果您想直接使用该值,只需在订阅块

中执行
 this._visitService.getchartData().subscribe(data =>
{ this.ReqData = data
  console.log("ISubscribe", this.ReqData );
  this.ImpoData = this.getData( this.ReqData);

});
//Here this.ReqData is not defined

编辑:如果您真的想在subscribeblock之外使用该值,可以将observable转换为promise并使用await / async模式

import 'rxjs/add/operator/toPromise';

//...
async yourMethod()
{
    try
    {
        this.ReqData = await this._visitService.getchartData().toPromise();
        //Here this.ReqData is accessible
        this.ImpoData = this.getData( this.ReqData);
    }
    catch(e)
    {
        //Handle your error here
    }


}