각도 2 및 chart.js (ngcharts를 통해)를 사용하여 차트 용 대시 보드를 만들려고합니다. 사용자 정의 간격에서 http 요청을 통해 각각 업데이트되는 차트 배열을 갖고 싶습니다.interval을 사용하여 observables의 배열을 업데이트하는 방법은 무엇입니까?
지금 당장 데이터를 배열에 푸시하는 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 나는 그것이 내가 묻고있는 것과 비슷하다고 생각한다. 각 차트는 다른 간격을두고 있으므로 각 항목을 가질 수 있기를 바란다. 어레이를 날려 보내지 않고도 변경 사항을 구독하고 업데이트하는 어레이. 배열에 구독자로 각 개체를 밀어 넣으려고했지만 작동하지 않았다. ID 배열을 검색하고 데이터를 직접 업데이트하지 않고도이 작업을 수행 할 수있는 방법이 있기를 바라고 있습니다. – Skerrvy