javascript - 使用chart.js同时创建多个饼图

标签 javascript charts chart.js

我尝试使用 chart.js 库创建 3 个饼图,但每次都会引发以下错误:

TypeError: me.getDatasetMeta(...).controller is null

我创建图表的方式是使用名为 create_chart 的函数来覆盖配置对象并创建新的图表实例。它在一张图表上工作得非常好,但是当它被重复调用或者甚至通过多次点击快速调用时,它会引发上述错误。

html 文件是:

<div class="wrap_chart">
    <div class="wrap_chart_view">
        <canvas id="chart-area"></canvas>
    </div>
</div>
<div class="wrap_chart_sub">
    <div class="wrap_chart_sub_view">
        <canvas id="chart-area1"></canvas>
        <canvas id="chart-area2"></canvas>
        <canvas id="chart-area3"></canvas>
    </div>
</div>

负责函数调用的代码片段是:

var reg = meta[label]["regulation"];
var vc = meta[label]["vc"];
var msc = meta[label]["msc"];
if(Object.keys(vc).length != 0){
    create_chart(vc, "Variation Type", 2)
};
if(Object.keys(msc).length != 0){
    create_chart(msc, "Functional Consequence", 3)
};
if (Object.keys(reg).length != 0){
    create_chart(reg, "regulation", 1)

当所有 if 计算结果为 True 时,会引发错误。

create_chart 函数如下:

function create_chart(obj, lbl, ind){
    var conf2 = Object.assign({}, config_x);
    var data = Object.values(obj);
    var labels = Object.keys(obj);
    //console.log(data);
    //console.log(labels);
    var cols = [];
    for(var i = 0; i< labels.length; i++) {
        cols.push(getRandomColor());
    }
    var dataset = [{
            data: data,
            backgroundColor: cols,
            label: lbl
        }]
    conf2.data.datasets = dataset;
    conf2.data.labels = labels;
    conf2.options.title.text = lbl;
    console.log(conf2);
    var canvas_x = document.getElementById('chart-area' + ind);
    var ctx2 = canvas_x.getContext('2d');
    new Chart(ctx2, conf2);

}

我使用控制台记录了所有内容,看起来一切都很好。我能想到的唯一问题是 Chart(ctx2, conf2); 行实例化的工作方式。我还检查了文档并遇到了 DatasetController 但在这种情况下无法使用它。

Chart.controllers.pie = Chart.DatasetController.extend({})

当我将其添加到代码中时,它会引发scale is undefined 错误

最佳答案

刚刚通过在生成图表之前调用延迟函数解决了问题:

function sleep(ms) {
    return new Promise(create_chart => setTimeout(create_chart, ms));
}
async function demo() {
    await sleep(2000);
}

create_chart函数中:

demo();
new Chart(ctx2, config);

关于javascript - 使用chart.js同时创建多个饼图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52274482/

相关文章:

javascript - 条形图中的链接 (charts.js)

javascript - 在 jQuery 中显示实际的 HTML 内容

javascript - 在 Javascript 中使用 Regex 返回单词数组

javascript - 如何在 chart.js 中更改图表高度

c# - 动态数据显示图表 : change Y axis range

Python 的 basemap 未与正确的坐标对齐?

javascript - Chart.JS 工具提示回调标签和标题 (v3.5)

javascript - <html> 比屏幕宽

javascript - 默认类实例化导致 TypeError(ESM/CJS 互操作)

charts - 如何使用JavaFX创建3D/曲面图?