Я использую линейные и гистограммы, используя Chart.js.У меня есть 2 варианта отображения их данных: до нажатия кнопки и после нажатия кнопки.Оба случая работают нормально.Но проблема в том, что при каждом нажатии кнопки и наведении курсора мыши на верхний график отображаются старые данные (все время).
Ожидаемый результат: Диаграмма больше не должна иметьпредыдущие данные, но вместо этого показывают новые данные, и пользователь может взаимодействовать с ними без проблем.
Фактический результат: Диаграмма показывает новые данные, но если пользователь наводит курсор на диаграмму, он будетмигать назад и вперед между исходными и новыми данными
Вот код
для отображения диаграмм
<div ngDraggable class="col-lg-4 my-2 drag-block" *ngFor="let selectedItem of selectedKpi" (edge)="checkEdge($event)"
[bounds]="myBounds" [inBounds]="inBounds">
<mat-card>
<mat-card-header>
<mat-card-title>
<h5>{{selectedItem}}</h5>
</mat-card-title>
</mat-card-header>
<mat-card-content>
<canvas id="{{selectedItem}}">{{chart}}</canvas>
</mat-card-content>
</mat-card>
</div>
Код машинописного текста:
this.selectedKpi = ["Clicks", "Orders", "Revenue", "Impressions"];
drawChart(kpi, divId, chartType, isFilled, data, labels, backgroundColor, borderColor) {
setTimeout(function () {
const canvas = <HTMLCanvasElement>document.getElementById(divId);
const ctx = canvas.getContext('2d');
this.element = document.getElementById(divId) as HTMLElement;
this.element.style.destroy;
this.chart = new Chart(ctx, {
type: chartType,
data: {
labels: labels,
datasets: [{
tension: 0,
label: kpi,
data: data,
fill: isFilled,
backgroundColor: backgroundColor,
borderWidth: 2,
pointBorderColor: borderColor,
pointRadius: 4,
borderJoinStyle: 'miter',
}]
},
options: {
responsive: true,
maintainAspectRatio: true,
scales: {
xAxes: [{
gridLines: {
display: true,
lineWidth: 1
}
}],
yAxes: [{
gridLines: {
display: true,
lineWidth: 1
}
}]
},
tooltips: {
mode: 'x',
callbacks: {
labelColor: function (tooltipItem, charts) {
return {
borderColor: borderColor,
backgroundColor: borderColor
};
},
labelTextColor: function (tooltipItem, charts) {
return '#3e95cd';
}
}
}, legend: {
display: false
}, emptyOverlay: {
fillStyle: 'rgba(74, 100, 100, 0.04)',
fontColor: 'rgba(0, 0, 0, 1)',
fontStrokeWidth: 0
}
}
});
}, 100);
}
, пожалуйста, объясните мне, как уничтожить холст и перерисовать его, используя его идентификатор.
Я также создал демонстрацию stackblitz.Ниже приводится URL.
https://stackblitz.com/edit/angular-sqnxbq