如何在构造函数外部访问构造函数值

时间:2017-10-21 06:03:23

标签: angular

我正在使用angular2。在我的项目中,使用http.get()方法获取json内容并将其分配给变量。我想在构造函数外部访问这些变量值。我怎样才能使它成为可能?

在我使用的组件页面中..

public result;

  constructor(private http : Http){
    this.http.get('http://192.168.0.100:8000/json1')
    .map(response => response.json())
    .subscribe(data =>{ this.result = data}); 
  }
  
  // I want to acces this.result outside the constructor and assigned to a public variable
  
  public b = JSON.stringify(this.result);
  
  // but it is not working

我怎样才能访问这个? 提前致谢

2 个答案:

答案 0 :(得分:2)

你正面临这个问题,因为数据还没有准备好,subscribe方法从不同的线程返回数据,当你分配this.result = data时,为时已晚,即你之前使用的是this.result .subscribe()完成(并实际分配数据)。

我不确定这是否是最佳方法,但您可以做的是将.map方法分配给变量,并在构造函数外部从变量中调用.subscribe方法。

所以你可以这样做:

public result;
constructor(private http : Http)
{
    this.http.get('http://192.168.0.100:8000/json1')
    .map(response => response.json());
    //.subscribe(data =>{ this.result = data}); comment this out 
}

// I want to acces this.result outside the constructor and assigned to a public variable
public myMethod()
{
    this.result.subscribe(data =>
    {
       console.log(data);
       //do what you want here.
    };
 }  

答案 1 :(得分:2)

从你的例子中,你为什么不能这样做?

  public result;
  public b;

  constructor(private http : Http){
    this.http.get('http://192.168.0.100:8000/json1')
    .map(response => response.json())
    .subscribe(data =>{ 
        this.result = data;
        this.b = JSON.stringify(this.result);
     }); 
  }

如果你需要设置它的值,然后用它做一些事情,你可以在完成处理程序中为get请求调用一个方法:

  constructor(private http : Http){
    this.http.get('http://192.168.0.100:8000/json1')
    .map(response => response.json())
    .subscribe(data =>{ 
        this.result = data;
        this.b = JSON.stringify(this.result);
     },
     err => console.log(err),
     () => {
         doStuffAndBisSet();
     }); 
  }