开发者问题收集

为什么我的 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