如何访问Angular中内部订阅的变量

时间:2019-04-10 10:48:55

标签: angular angular2-routing angular7

我在访问内部订阅的变量时遇到问题。在这里,我包含代码,在ngOninit中,我有返回对象的服务,并且可以从该对象中获取所需的json,然后尝试将其存储在变量中,然后尝试在外部访问该变量订阅我无法做到的。那么如何在外部使用变量?

ngOnInit() {
    const id = this.route.snapshot.paramMap.get('id');
    this.dataService.GetFormById(+id).subscribe(response => {
      console.log(response);
      const temp = response['TemplateJson'];
      var Data = temp;
    })

    initJq();
      var formData = Data

      this.formBuilder = (<any>jQuery('.build-wrap')).formBuilder({ formData });

     // Sample code to handle promise to get for data on page load directly
      this.formBuilder.promise.then(formBuilder => {
        console.log(formBuilder.formData);
      });
  }

在内部的这段代码中,有变量Data,临时有json,所以我该如何将数据存储在formData变量中。

2 个答案:

答案 0 :(得分:1)

这很简单

data: any;
ngOnInit() {
    const id = this.route.snapshot.paramMap.get('id');
    const that = this;
    this.dataService.GetFormById(+id).subscribe(response => {
      console.log(response);
      // const temp = response['TemplateJson'];
      that.data = response['TemplateJson'];
    })

  }

由于这是异步的,this.data必须在使用之前进行检查,否则是否可以使用它,或者您可以在异步回调中进行任何所需的操作,该回调位于{{1 }}进行初始化。

示例

data

答案 1 :(得分:0)

我可以根据您的代码想到的2种方法:只需设置一个全局变量并在您的订阅中引用它即可:

a = my_series.resample('1D',closed='left',label='left').sum(min_count=1)
print (a)
2017-02-01    11.0
2017-02-02     NaN
2017-02-03     3.0
Freq: D, Name: a, dtype: float64

或者(由于需要从预订中获取数据的大多数代码必须异步运行),只需使用rxjs管道并将数据传递给Tap或您想要的任何其他运算符即可:

`
data = null; //here
const id = this.route.snapshot.paramMap.get('id');
this.dataService.GetFormById(+id).subscribe(response => {
  console.log(response);
  const temp = response['TemplateJson'];
  this.data = temp; //here use it wherever you want using this.data, but check if its null
})

initJq();
  var formData = Data

  this.formBuilder = (<any>jQuery('.build-wrap')).formBuilder({ formData });

 // Sample code to handle promise to get for data on page load directly
  this.formBuilder.promise.then(formBuilder => {
    console.log(formBuilder.formData);
  });
}`