为什么我的 Chart.JS 画布没有被销毁?
2021-04-01
186
我目前在使用 Chart.JS 时遇到了问题,尤其是销毁多个图表时。
设置:
我通过其 API 调用地理数据服务,然后在其下方的图表上显示所点击多边形的统计信息。我尝试以编程方式将这些图表和相关数据分配到名为
chartPropertyArray
的对象数组中。每个数组对象都包含变量、数据和图表变量(请参阅下面的对象结构)。
每个 Chart.JS Canvas 对象 (varChart) 和 Chart.JS 所需的相关上下文信息 (ctx) 都是这样设置的(请参阅下文)。
问题:
因为必须将每个图表分配给要销毁的唯一变量,所以图表被放置在
chartPropertyArray
中的相应对象中。
我试图循环遍历这些对象并销毁数组中的所有图表,但这不起作用。只是不断添加更多图表。我做错了什么?
chartPropertyArray 的结构:
var chartPropertyArray = [
{"variable": "popnChart",
"data": [],
"label": "Total Population",
"ctx": "",
"varChart": ""
},
{"variable": "densityChart",
"data": [59, 24, 2],
"label": "Population Density",
"ctx": "",
"varChart": ""
},
{"variable": "familiesChart",
"data": [3, 5, 1],
"label": "Family Size",
"ctx": "",
"varChart": ""
},
{"variable": "incomeChart",
"data": [12, 45, 78],
"label": "Average Income",
"ctx": "",
"varChart": ""
}
]
使用 Chart.JS 创建图表所需的设置:
var ctx = document.getElementById('myChart').getContext('2d');
var chart = new Chart(ctx,
...
使用此方法创建图表的示例:
i = 0
while (i < chartPropertyArray.length) {
properties = chartPropertyArray[i]
properties["ctx"] = document.getElementById(properties.variable).getContext('2d');
properties["varChart"] = new Chart(properties.ctx, {
...
i++
}
使用此方法销毁图表的示例:
i = 0
while (i < chartPropertyArray.length) {
properties = chartPropertyArray[i]
properties.varChart.destroy()
i++
}
1个回答
好吧,这完全是我的错。有一个函数将测试图表设置为 0(基本上是在启动时创建空白图表),该函数被设置为不同的变量。这意味着总是有两张图表(总共四对图表)相互重叠,即使我每次都成功销毁一张图表。
感谢您的快速反馈 :)
ScriptedChicken
2021-04-01