Search code examples
angularngx-charts

how to initialize chart with API fetch data?


I want to use ngx-charts for my project. The problem is I don't understand how to initialize my chart with data I got from my api.

The vertical bar chart seems easy. The data is of the following type:

https://stackblitz.com/edit/vertical-bar-chart?embed=1&file=app/app.component.ts

When I assign in the constructor Object.assign(this, data) (the data I got from my api)) I receive the following error :

ERROR TypeError: Cannot read property 'toLocaleString' of undefined

Their data is the following type:

export var single = [{
    "name": "Germany",
    "value": 8940000
  },
  {
    "name": "USA",
    "value": 5000000
  },
  {
    "name": "France",
    "value": 7200000
  }
];

My data is :

[{
    "data": "2019-01-09",
    "totalConsum24": 66.66666666666667
  },
  {
    "data": "2019-02-03",
    "totalConsum24": 160
  },
  {
    "data": "2019-02-04",
    "totalConsum24": 153.84615384615384
  },
  {
    "data": "2019-02-05",
    "totalConsum24": 90.9090909090909
  }
]

Edit1: This is how i get my data from my backend. the data is the same as i posted above. In the COnstructor I begin with Object.assign(this, {single}) and initially single: any[];

ngOnInit() {
this.shipService.getConsumuriSiDataForShipById(this.shipId).subscribe(data 
=> {
  console.log(data);
  this.single = data;
});

Solution

  • And in your Component, you'll have to map the data to the format that the ngx-charts understand. Here, give this a try:

    ...
    import { ShipService } from './path-to-ship-service';
    
    @Component({...})
    export class AppComponent {
    
      ...,
      single = [];
    
      constructor(private shipService: ShipService) {}
    
      ngOnInit() {
        this.shipService.getConsumuriSiDataForShipById(this.shipId)
          .subscribe(data => {
            console.log(data);
            this.single = data.map(datum => ({ name: datum.data, value: datum.totalConsum24 }));
        });
      }
    
      ...
    }
    

    Here's a Working Sample StackBlitz for your ref.