I am doing a project in Angular8 and creating charts using ChartJS. After running the project, it will show the charts. But it will give an error saying:
Property 'getContext' does not exist on type 'HTMLElement'.
How do I get rid of this error?
Here is my code:
chart.component.html
<div id="container" style="width:350px;height:250px"> <canvas id="myChart" width=300 height=300></canvas> </div>
chart.component.ts
import {Component, OnInit} from '@angular/core'; import {Chart} from 'chart.js'; import {ChartService} from '../charts/chart.service'; import {HttpClient} from '@angular/common/http'; // import {DATA} from '../CHART/CHARTS.MODEL'; @Component({ selector: 'app-charts', templateUrl: './charts.component.html', styleUrls: ['./charts.component.scss'] }) export class ChartsComponent implements OnInit { constructor( private ChartItems: ChartService, private httpClient: HttpClient ) { } ngOnInit() { this.getChartDetails(); } getChartDetails() { this.ChartItems.getChart().subscribe(data => { console.log(data); const chartLable = []; const chartDetails = []; for (let i = 0; i < data.chartDetails[0].chartData.length; i++) { chartLable.push(data.chartDetails[0].chartData[i].x); chartDetails.push(data.chartDetails[0].chartData[i].y); } const ctx = document.getElementById('myChart').getContext('2d'); const myChart = new Chart(ctx, { type: 'bar', data: { labels: chartLable, datasets: [{ label: '# of Votes', data: chartDetails, backgroundColor: [ 'rgba(255, 99, 132, 0.2)', 'rgba(54, 162, 235, 0.2)', 'rgba(255, 206, 86, 0.2)', ], borderColor: [ 'rgba(255, 99, 132, 1)', 'rgba(54, 162, 235, 1)', 'rgba(255, 206, 86, 1)', ], borderWidth: 1 }] }, options: { scales: { yAxes: [{ ticks: { beginAtZero: true } }] } } }); } ); }}
chart.service.ts
import { Injectable } from '@angular/core'; import {HttpClient, HttpHeaders} from '@angular/common/http'; import {Observable} from 'rxjs'; const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', }) }; @Injectable({ providedIn: 'root' }) export class ChartService { httpOptions: any; baseUrl: any; headers: any; constructor( private http: HttpClient ) { this.headers = new Headers( { 'content-type': 'application/json'} ); // this.httpOptions = new RequestOptions( { headers: this.headers } ); } getChart() { console.log('SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'); return this.http.get('https://api.myjson.com/bins/8au55',""); } }
getContext() method returns a drawing context on the canvas, or null if the context identifier is not supported, or the canvas has already been set to a different context mode.
The getContext() function is the function that you use to get access to the <canvas> tags 2D drawing functions. As of April 2014, there are two types of context that are available to you: 2d and webgl . These provide you with the API that you use to draw on the <canvas> .
The HTMLCanvasElement interface provides properties and methods for manipulating the layout and presentation of <canvas> elements. The HTMLCanvasElement interface also inherits the properties and methods of the HTMLElement interface.
I would try:
const canvas = <HTMLCanvasElement> document.getElementById('myChart'); const ctx = canvas.getContext('2d');
the purpose of Typescript is to avoid wrong types. By default document.getElementById
returns a HTMLElement
type which is a generic type. In order to make your app understand it is a canvas element you need to cast it using <CastedToType>
syntax.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With