作者:IHH_MCWONG_142 | 来源:互联网 | 2023-01-16 13:50
我有一个代码,在选择下拉列表后更新Graphic的数据.但是,当我选择一个选项时,它看起来像新的Graphic和旧的Graphic同时停留在同一个画布上.
这是我的代码:
funcao(){
this.graphicService.getDatas().subscribe(datas => {
this.datas = datas; //Gets the data from the API and put on local datas variable
if(this.data[0].dimension == "Tech")
{
this.counter=0;
}
else if(this.data[0].dimension == "Bus"){
this.counter=1;
}
this.barChartData = { //Bar graphic data
labels: ["Entry", "Foundation"],
datasets: [{
label: this.datas[this.counter].subdimensions[0].name,
backgroundColor: 'rgba(37, 230, 131,0.7)'
data: [
this.datas[this.counter].subdimensions[0].entry,
this.datas[this.counter].subdimensions[0].foundation
]
}]
};
this.canvas = document.getElementById('myChart');
this.ctx = this.canvas.getContext('2d');
let myChart = new Chart(this.ctx, { // Bar graphic configs
type: 'bar',
data: this.barChartData,
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
}
});
});
}
HTML
我想要做的是旧图形消失,只有新图形停留在屏幕上.
1> ɢʀᴜɴᴛ..:
好像你正在使用ChartJS库.在这种情况下,您可以使用该destroy()
方法销毁任何以前的图表实例.
ꜰɪʀꜱᴛ
在图表组件类中添加一个属性(图表实例将存储在其中):
public myChart: Chart
ꜱᴇᴄᴏɴᴅ
在创建新图表实例之前检查并销毁图表实例(如果有):
...
if (this.myChart) this.myChart.destroy(); //destroy prev chart instance
this.myChart = new Chart(this.ctx, {
type: 'bar',
data: this.barChartData,
...