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

Angular 如何在构造函数外部访问构造函数值,angular,Angular,我正在使用angular2。在我的项目中,使用http.get()方法获取json内容并将其分配给变量。我想在构造函数之外访问这些变量值。我如何才能做到这一点 在我的组件页面中,我使用了。。 公共结果; 构造函数(专用http:http){ this.http.get('http://192.168.0.100:8000/json1') .map(response=>response.json()) .subscribe(数据=>{this.result=data}); } //我想在构造函数外

我正在使用angular2。在我的项目中,使用http.get()方法获取json内容并将其分配给变量。我想在构造函数之外访问这些变量值。我如何才能做到这一点

在我的组件页面中,我使用了。。
公共结果;
构造函数(专用http:http){
this.http.get('http://192.168.0.100:8000/json1')
.map(response=>response.json())
.subscribe(数据=>{this.result=data});
}
//我想在构造函数外部访问this.result并将其分配给公共变量
public b=JSON.stringify(this.result);

//但是它不起作用
您面临这个问题,因为数据还没有准备好,subscribe方法从另一个线程返回数据,当您分配this.result=data时,为时已晚,即在.subscribe()完成(并实际分配数据)之前使用this.result

我不确定这是否是最好的方法,但您可以做的是将.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.
    };
 }  

您正面临此问题,因为数据尚未准备就绪,subscribe方法从不同的线程返回数据,当您分配this.result=data时,为时已晚,即在.subscribe()完成(并实际分配数据)之前使用this.result

我不确定这是否是最好的方法,但您可以做的是将.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.
    };
 }  

从你的例子来看,你为什么不能这样做

  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();
     }); 
  }

从你的例子来看,你为什么不能这样做

  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();
     }); 
  }

您不知道执行此操作需要多长时间以及变量何时可用,因此请将请求移动到某个方法,并在需要时调用该方法。您不知道执行此操作需要多长时间以及变量何时可用,因此请将请求移动到某个方法,并在需要时调用该方法。