chart.js Не удалось создать диаграмму: невозможно получить контекст из данного элемента
Я никогда не попадал в узел, поэтому я уверен, что я делаю что-то массовое неправильно, так как я не могу найти какую-либо информацию по googling.
У меня есть сайт django, и мне нужна библиотека диаграмм JS, я выбрал chart.js.
Я установил и, как документы, но после этого я не уверен, что делать, я попытался заполнить пробелы и как можно больше следовать их руководству. Вот как выглядит мой html...
<script src="/public/node_modules/chart.js/dist/Chart.js"></script>
<canvas id="myChart" width="400" height="400"></canvas>
<script>
var ctx = document.getElementById("myChart");
console.log(ctx);
var options = {}
var data = {
labels: ["January", "February", "March", "April", "May", "June", "July"],
datasets: [
{
label: "My First dataset",
fill: false,
lineTension: 0.1,
backgroundColor: "rgba(75,192,192,0.4)",
borderColor: "rgba(75,192,192,1)",
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
pointBorderColor: "rgba(75,192,192,1)",
pointBackgroundColor: "#fff",
pointBorderWidth: 1,
pointHoverRadius: 5,
pointHoverBackgroundColor: "rgba(75,192,192,1)",
pointHoverBorderColor: "rgba(220,220,220,1)",
pointHoverBorderWidth: 2,
pointRadius: 1,
pointHitRadius: 10,
data: [65, 59, 80, 81, 56, 55, 40],
spanGaps: false,
}
]
};
var myChart = new Chart({
type: 'line',
data: data,
options: options
})
</script>
Я просто пытаюсь заставить пример работать. Я поместил каталог node_modules, который был загружен через npm где-то, где мой сервер будет их обслуживать.... и проверял, что они обслуживаются, но затем я получаю эту ошибку, когда пытаюсь построить диаграмму. Я взял все коды диаграмм из своих документов, поэтому я уверен, что часть права, но я не понимаю, почему я получаю эту ошибку.
Ответы
Ответ 1
Вы не передаете контекст (ctx
) при вызове конструктора. Из документации:
Чтобы создать диаграмму, нам нужно создать экземпляр класса Chart. Для этого нам нужно передать узел, экземпляр jQuery или 2d контекст холста, где мы хотим нарисовать диаграмму.
<canvas id="myChart" width="400" height="400"></canvas>
Можно использовать любой из следующих форматов:
var ctx = document.getElementById('myChart');
var ctx = document.getElementById('myChart').getContext('2d');
var ctx = $('#myChart');
var ctx = 'myChart';
var myChart = new Chart(ctx, {
type: 'line',
data: {/* Data here */},
options: {/* Options here */}
}
Ответ 2
Другая причина получить ту же ошибку, если элемент, указанный идентификатором, не является <canvas>
. У меня был элемент <div>
в моем HTML-источнике, и, конечно, это не сработало.
Ответ 3
Я немного опаздываю на вечеринку, но если другие разработчики достигают этой должности, убедитесь, что вы не ссылаетесь на документ или окно. Угловая команда не поощряет непосредственный доступ к переменной dom. Вместо этого используйте ElementRef
import { Component, OnInit, ElementRef } from '@angular/core';
@Component({
selector: 'my-compo',
templateUrl: 'mycompo.html',
})
export class MyCompo implements OnInit {
myChart:any;
constructor(private elementRef: ElementRef) {
}
ngOnInit(){
this.chartit();
}
chartit(){
let htmlRef = this.elementRef.nativeElement.querySelector('#yourCavasId');
this.myChart = new Chart(htmlRef, {
//your data here
});
}
}
HTML, предложенный @mavroprovato
<canvas id="yourCavasId" ></canvas>
Ответ 4
вы можете использовать
добавьте это в свой шаблон
<canvas #myCanvas width="500" height="300"></canvas>
добавьте это в свой компонент
@ViewChild('myCanvas') canvasRef: ElementRef;
constructor()
когда готов рисовать, вызовите это
this.ctx = this.canvasRef.nativeElement.getContext('2d');
this.chart = new Chart(this.ctx, {....})
Ответ 5
Была эта ошибка, потому что я пытался установить диаграмму на конструкторе вместо ngAfterContentInit
У меня лично нет проблем с указанием идентификатора холста в качестве строки для контекста.
this.chart = new Chart('myChartId', {...})