Je ne suis jamais entré dans le nœud, je suis donc presque sûr que je fais quelque chose de totalement faux ici car je ne trouve aucune information du tout sur Google.
J'ai un site Django et je voulais une bibliothèque de cartographie JS, j'ai choisi chart.js.
J'ai installé et aimé la documentation, mais après cela, je ne savais pas quoi faire, alors j'ai essayé de remplir les blancs et de suivre leur guide autant que possible. Voici à quoi ressemble mon 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>
J'essaie juste de faire fonctionner un exemple. Je mets le répertoire node_modules qui a été téléchargé via npm à un endroit où mon serveur les servirait ... et vérifie qu'ils sont servis, mais je reçois cette erreur lorsque j'essaie de créer un graphique. J'ai pris tous les codes des cartes de leurs documents, alors je suis à peu près sûr que cette partie est correcte, mais je ne vois pas pourquoi j'obtiens cette erreur.
Vous ne passez pas le contexte 2d de la toile (ctx
) lorsque vous appelez le constructeur. De la documentation :
Pour créer un graphique, nous devons instancier la classe Chart. Pour ce faire, nous devons passer le nœud, l’instance jQuery ou le contexte 2d de la trame de l’endroit où nous voulons dessiner le graphique.
<canvas id="myChart" width="400" height="400"></canvas>
Tous les formats suivants peuvent être utilisés:
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 */}
}
Une autre raison d'obtenir la même erreur est si l'élément référencé par l'id n'est pas un <canvas>
. J'ai eu un <div>
élément dans mon source HTML, et bien sûr cela n'a pas fonctionné.
Je suis un peu en retard pour la fête, mais si d'autres développeurs parviennent à cet article, assurez-vous de ne pas faire référence à un document ou à une fenêtre. L'équipe angular $ angulaire n'encourage pas l'accès direct à la variable dom. Utilisez plutôt 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 comme suggéré par @mavroprovato
<canvas id="yourCavasId" ></canvas>
vous pouvez utiliser
ajoutez ceci dans votre modèle<canvas #myCanvas width="500" height="300"></canvas>
ajoutez ceci à votre composant
@ViewChild('myCanvas') canvasRef: ElementRef;
constructor()
quand vous êtes prêt à dessiner, appelez ceci
this.ctx = this.canvasRef.nativeElement.getContext('2d');
this.chart = new Chart(this.ctx, {....})
Si cette erreur était due à la tentative d’ajustement du graphique constructeur au lieu de ngAfterContentInit
Personnellement, je n'ai aucun problème à donner le identifiant de toile comme chaîne pour le contexte
this.chart = new Chart('myChartId', {...})