使用Angular 5从接口获取数据到highcharts图表

时间:2017-12-01 15:45:47

标签: angular typescript angular2-highcharts

我正在使用此npm包制作图表:https://www.npmjs.com/package/angular-highcharts

我有一个界面,我想从界面中取值来填充图表。在这个阶段,我只想要一个折线图。

我尝试了各种使用数组的方法,只要我通过对所有值进行硬编码来初始化数组就可以正常工作,但是我想将服务中的值动态加载到接口中,然后采用从界面到图表的值。我做错了什么?

这是我的component.ts

import { Component, OnInit } from '@angular/core';
import { Chart } from 'angular-highcharts';
import { WeatherstatsService } from '../weatherstats.service';
import 'rxjs/add/operator/map';

interface WeatherData {
  id: any;
  year: any;
  measurement_type: string;
  location: string;
  month_or_season: string;
  value?: any;
}

let datavalues: WeatherData [] = [];

@Component({
  selector: 'weatherchart',
  templateUrl: './weatherchart.component.html',
  styleUrls: ['./weatherchart.component.css']
})
export class WeatherchartComponent implements OnInit {

  constructor(private weatherstatsservice: WeatherstatsService) { }



  title = "Title";
  data: any;
  datavalues = datavalues;
  values: Array<number> = [];


  chart = new Chart({
        chart: {
          type: 'line'
        },
        title: {
          text: this.title,
        },
        credits: {
          enabled: false
        },
        series: [{
          name: 'Line 1',
          data: this.datavalues.year,
        }]
      });

    // add point to chart serie
    add() {
      this.chart.addPoint(Math.floor(Math.random() * 10));
    }

    ngOnInit() {
          this.weatherstatsservice.getWeatherData()
            .subscribe(data => {
              this.data = data.slice(0, 100);
             if(this.data){
              this.data.forEach( res => {
                this.datavalues.push({
                  id: res.id,
                  year: res.year,
                  measurement_type: res.measurement_type,
                  location: res.location,
                  month_or_season: res.month_or_season,
                  value: res.value,
                })
               });
               console.log(this.datavalues);

            }
        })
      }


    }

1 个答案:

答案 0 :(得分:0)

这是库的常见问题,我遇到了与ng2-chart相同的问题,可以通过使用API​​重绘它来解决。

您可以通过将图表实例作为

传递来实现
<chart [options]="options" (load)="saveInstance($event.context)"></chart>

和TS

chart: Object;
saveInstance(chartInstance): void {
     this.chart = chartInstance;
}

当您从API获取数据时,您可以重绘为

updateSeries(data: Array<any>): void {
   this.chart.series[0].setData(data);
}