2016-08-04 9 views
3

私はカスタムクラス配列であるプロパティを持っています。配列には、データのWebサービスを呼び出すサービスへの呼び出しが設定されます。私はobservableを購読しており、completeイベントを使ってグラフをロードするメソッドを起動しています。角2 - メソッドで定義されていないコンポーネントプロパティ

グラフに使用するデータは、購読中に配置された配列から取得する必要がありますが、メソッドでこれを実行しようとすると、コンポーネントプロパティで未定義のエラーが発生します。これはなぜですか、私は同じクラスのメソッドからコンポーネントのプロパティにアクセス可能でなければなりません。 this.

ngOnInit(): void { 
    console.log('talking to service...'); 
    this._metricsService.getData() 
     .subscribe(
      data => this.metric = data, 
      error => this.errorMessage = <any>error, 
      () => this.LoadChart() 
     ); 
} 

答えて

5

矢印機能は、より多くの情報のため、このようにそれを行うあなたはChromeデベロッパーツールを使用している場合、それはまだヌルが表示されますについてlexical thisarrow functionsもう一つを読みますクローム開発ツールのバグがあります。それが動作する。この、より具体的理由で構築する

LoadChart =() => void { 
    console.log(this.metric); // 
} 
+0

は.subscribeで3番目の引数は()観察可能が「完全」であるときに呼び出されますonCompleteの機能です。 –

+0

これはうまくいきましたが、今私には似た新しい問題があります。私はLoadChartメソッド内にsetInterval関数を持っていますが、どうすればその中に 'this'が得られますか? –

+0

同じ 'setInterval(()=> doSomething()) ' –

0

の範囲を保持する

export class MetricsComponent implements OnInit{ 
errorMessage: string; 
metric: MetricData[] = []; 

//constructor is used for dependency injection 
constructor(public _metricsService: MetricsService){} 

ngOnInit(): void { 
    console.log('talking to service...'); 
    this._metricsService.getData() 
     .subscribe(
      data => this.metric = data, 
      error => this.errorMessage = <any>error, 
      this.LoadChart 
     ); 
} 

LoadChart(): void { 
    console.log(this.metric); // <== this returns as undefined 
} 
+0

深いところへ行き、Lexicalへのリンクを提供してくれてありがとう。 –

関連する問題