角度2とchart.js(ngcharts経由)を使ってグラフ用のダッシュボードを作成しようとしています。私はカスタムインターバルでhttpリクエストを介して更新される一連のチャートを持っていたいと思います。間隔を使用してオブザーバブルの配列を更新するにはどうすればよいですか?
今、データを配列にプッシュする3つのチャートコールがあります。私は次の繰り返しになると困っています。もし配列にもう一度行くと、3つのグラフが追加されます。私は、配列のサブスクライバが、間隔がそれを発行するときに新しいデータで更新することを望みます。
私のユースケースのコンポーネント/サービス/ http関係を正しく構造化する方法について少し混乱します。私は近くにいると感じますが、私は間違いなく何かを欠いています。インターバル/サブスクライバ関係をビューにマップし、ある間隔で既存のグラフを更新するにはどうすればよいですか? 助けがあれば助かります!今
:
サービス:
は、私がここに間隔を実装しています:
getSingleChartObsinterval(id: number, interval: number) : Observable<Graph> {
return Observable.interval(interval).flatMap(() => this.getSingleChartobs(id));
}
getSingleChartobs(id: number) : Observable<Graph> {
return this.jsonp.get(“api location”)
.map(response => this.extractJsonData(response, id) as Graph)
}
extractJsonDataだけの応答を取得し、チャートJSで動作するように、それを操作しています。これは、使いやすいプロパティを持つGraphオブジェクトを返します。私はAPIのコントロールを持っていないので、複数のグラフを含むようにレスポンスを再構成することはできません。
コンポーネント:
import { Component } from '@angular/core';
import { ChartsModule } from 'ng2-charts/ng2-charts';
import { ChartService } from './chart.service';
import { Graph } from './graph';
import { OnInit } from '@angular/core';
import { Observable } from 'rxjs/Rx';
@Component({
selector: 'ab-chart',
styles: [`
.chart {
display: block;
}
`],
templateUrl: 'app/chart.component.html'
})
export class ChartComponent implements OnInit {
ngOnInit(): void {
console.log("Chart component init");
this.getSingleChart(3, 5000);
this.getSingleChart(5, 4000);
this.getSingleChart(6, 5000);
}
graph: Graph;
graphs: Graph[] = [];
constructor(
private chartService: ChartService
) {}
getSingleChart(id: number, interval: number): void {
this.chartService.getSingleChartObsinterval(id, interval)
.subscribe(x =>
this.graphs.push(x)
);
}
}
ビュー:
<div *ngFor="let graph of graphs" class="chart-container">
<base-chart
class="chart"
[datasets]="graph.datasets"
[labels]="graph.labels"
[options]="graph.options"
[chartType]="graph.type">
</base-chart>
</div>
代わりの新しいをプッシュします既存のグラフを新しいデータで置き換えることはできないのですか?chart.jsについては何も知らないので、データを置き換えずに単に新しいグラフを描画するのを待つだけです –
@ NoémiSalaün私はそれが私が求めているもののようなものだと思う。それぞれのチャートは異なる間隔にあるので、私は各アイテムiアレイを吹き飛ばすことなく、変更に加入し更新するアレイ。私は各オブジェクトを配列のサブスクライバとしてプッシュしようとしましたが、動作しませんでした。配列を検索してデータを更新しなくても、これを実行できる方法があることを願っています。 – Skerrvy