2017-04-08 4 views
0

ng2-chartsパッケージを使用する角度(2)のアプリケーションがあります。私のコンポーネントの1つに、サーバーから照会するデータを含む円グラフが表示されます。成分を以下に示す:ng2-chartsは更新されたラベルを表示せず、データのみ

export class PieChartComponent implements OnInit { 
    data: Array<number> = []; 
    labels: Array<string> = ['', '', '', '']; 
    private line: string; 
    private department: string; 

    constructor(public dataService: LineService, private route: ActivatedRoute) { 
    this.route.params.forEach((params: Params) => { 
     this.department = params['dep']; 
     this.line = params['id']; 
    }); 
    } 

    ngOnInit() { 
    this.dataService.getLineTAL(this.department, this.line).forEach(result => { 
     this.data = result.map(val => val.val); 
     this.labels = result.map(val => val.tag); 
    }); 
    }  
} 

とHTML:

<div style="display: block"> 
    <canvas baseChart [data]="data" [labels]="labels" [chartType]="'pie'" (chartClick)="chartClicked($event)" width="1" height="1"></canvas> 
</div> 

デバッガを実行する場合、私はthis.labelsが正しくの値でなければならない文字列の配列を含むように更新されていることを確認することができグラフのデータラベル。しかし、グラフが正しいデータをレンダリングし、ない値を取得私の上にホバーのように:

enter image description here

デフォルトの色はすべてグレーに変更されている理由を、私もわかりませんか?私はそれを自分のコンポーネントに振りかけるまで、このロジックとUIはうまく動作しています。

他の質問でも指摘されているように、サービスコールの前に@ViewChild(BaseChartDirective) chart: BaseChartDirective;の図があるthis.chart.ngOnChanges({});を追加しようとしました。また、結果マッピングの最後にthis.labels = this.labels.slice();を試して強制的にリフレッシュを試みましたが、いずれも助けになりませんでした。

更新:

コメントで述べたように、ngAfterViewInitイベントで、チャートオブジェクトは、正しいデータとラベルプロパティ(アレイ)を含みます。しかし、まだ適切に表示されていません。

+0

生成した結果のグラフオブジェクトをデバッグしましたか? オブジェクトのプロパティが正しく設定されているかどうかを明示するには、ngAfterViewInit()のヒット時にチャートオブジェクトのプロパティをデバッグしてチェックします。 – Nugu

+0

@nuguグラフオブジェクトはngAfterViewInitに記録され、プロパティー 'labels:Array(4)0:" station1 "、1:" station2 "、2:" station4 "、3:" station7 "データプロパティ?問題がどこにあるのかまだ分かりません。 –

+0

私は個人的にng2-chartsを使用していませんが、自分の例でグラフプロパティを実行することをお勧めします(http://plnkr.co/edit/7fGsiuRjcF0M0Ffeoml2?p=preview) グラフのプロパティを設定し、あなたは同じ結果を受け取ります。最新のバージョン – Nugu

答えて

3

NG2-チャートになるとの問題あなたは、時間(ラベルとデータ)の両方の性質を更新しようとすると、簡単な解決策は、直接データを設定することで、0タイムアウト内部ラベル:付き

ngOnInit() { 
    this.dataService.getLineTAL(this.department, this.line).forEach(result => { 
     this.data = result.map(val => val.val); 
     setTimeout(() => {this.labels = result.map(val => val.tag)}; 
    }); 
    } 

これは、あなたがする必要があります。

+0

になっていることを確認してください。これで、単体テストが失敗するようになりました。 'setTimeout()'行が正しく実行されたことを私の期待ラインで確認できますか? –

+0

私はこれを修正するのに2日を費やしました。私はgithubの問題とすべてですべてを試してみました。どうもありがとう。 –

関連する問題