J'ai le problème avec le graphique de mise à jour js en angulaire. J'utilise pour cela ngrx store.
Dans l'abonné sélecteur (exécuté dans ngOnInit), j'ai essayé de mettre à jour les données du graphique:
this.yrSubscription = this.userDataStore.pipe(select(selectYrReport))
.subscribe(el => {
el.sessions.forEach(item => {
this.datasetsSessions[0].data.Push(+item);
});
});
Et mes données graphiques:
datasetsSessions: ChartDataSets[] = [{
label: 'Sessions',
data: [],
fill: false
}];
Enregistrer les graphiques:
private _registerCustomChartJSPlugin(): void {
(window as any).Chart.plugins.register({
afterDatasetsDraw: (chart, easing): any => {
if (!chart.options.plugins.xLabelsOnTop
|| (chart.options.plugins.xLabelsOnTop && chart.options.plugins.xLabelsOnTop.active === false)) {
return;
}
const ctx = chart.ctx;
chart.data.datasets.forEach((dataset, i): any => {
const meta = chart.getDatasetMeta(i);
if (!meta.hidden) {
meta.data.forEach((element, index): any => {
// Draw the text in black, with the specified font
ctx.fillStyle = 'rgba(255, 255, 255, 0.7)';
const fontSize = 13;
const fontStyle = 'normal';
const fontFamily = 'Roboto, Helvetica Neue, Arial';
ctx.font = (window as any).Chart.helpers.fontString(fontSize, fontStyle, fontFamily);
const dataString = dataset.data[index].toString() + 'k';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
const padding = 15;
const startY = 24;
const position = element.tooltipPosition();
ctx.fillText(dataString, position.x, startY);
ctx.save();
ctx.beginPath();
ctx.setLineDash([5, 3]);
ctx.moveTo(position.x, startY + padding);
ctx.lineTo(position.x, position.y - padding);
ctx.strokeStyle = 'rgba(255,255,255,0.12)';
ctx.stroke();
ctx.restore();
});
}
});
}
});
}
Et je l'appelle en constructeur.
Je sais que j'ai besoin d'exécuter chart.update (). Mais j'ai toujours une erreur sur le graphique n'est pas défini, etc.
En supposant que vous enregistrez les graphiques dans le même composant. Tout d'abord, vous devez conserver une référence à votre graphique personnalisé. Dans votre composant, ajoutez ceci dans votre classe de composant
customChartInstance : Chart;
Puis dans votre afterDatasetsDraw
ajoutez this.customChartInstance=chart
puis dans votre abonnement ajoutez
this.chart.update();