私は最近 Angular2で作業を始めており、フレームワークng2-chartsについて質問があります。
これが私のcomponent.tsコードです:
import { Component } from '@angular/core';
import { ChartsModule } from 'ng2-charts';
import { PredictionService } from './prediction.service'
@Component({
selector: 'prediction-result-chart',
templateUrl: './predictionResultChart.component.html'
})
export class PredictionResultChartComponent{
public pieChartLabels:string[] = [];
public pieChartData:number[] = [];
public pieChartType:string = 'pie';
public JSONobject = {}
constructor(private predictionService: PredictionService){
this.getPredictions();
}
public getPredictions() {
this.predictionService.getPredictions('hello').do(result => this.populateChart(result)).subscribe();
}
public populateChart(obj): void{
let labels:string[] = [];
let data:number[] = [];
for (var i = 0; i < obj.predictions.length; i++)
{
labels.push(String(obj.predictions[i].class));
data.push(obj.predictions[i].percentage);
};
this.pieChartData = data;
this.pieChartLabels = labels;
}
public chartClicked(e:any):void {}
public chartHovered(e:any):void {}
}
component.htmlコード:
<div style="display: block">
<canvas baseChart
[data]="pieChartData"
[labels]="pieChartLabels"
[chartType]="pieChartType"
(chartHover)="chartHovered($event)"
(chartClick)="chartClicked($event)"></canvas>
</div>
サービスコード:
import { Injectable } from '@angular/core';
import { Http, Response, Headers } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class PredictionService {
private baseUrl: string = 'http://localhost:8080/predict/';
constructor(private http : Http){
}
getPredictions(text :string) {
return this.http.get(this.baseUrl + text).map(res => res.json());
}
}
上記のコードでは、ここに私が持っているもの、色のないチャートがあります:
実際、コードを詳しく調べたところ、HTML コンポーネントは最初に変数を取得し、その後で更新していました。そのため、ラベルが空の場合、いくつかのラベルを追加しても、それらは未定義として追加されます。したがって、適切な値を含むグラフがありますが、適切なラベルはありません。すべてが未定義としてマークされています。
そして、最初にラベルを開始すると、適切な値を持つ適切な色付きのチャートが作成されます
だから私の質問は:
データをロードしてから HTML コンポーネントをレンダリングする方法は?
chart.js コンポーネントをデータなしでレンダリングし、正しいラベルとデータで更新する方法はありますか?
助けが必要です、ありがとう。