Chart.js更新功能(图表,标签,数据)不会更新图表

时间:2018-03-19 10:01:22

标签: javascript chart.js

我无法调试以下代码。我想更新图表数据(不添加在顶部;删除当前数据并添加全新的数据集)。 (不)在codepen上的工作示例:

https://codepen.io/anon/pen/bvBxpr

var config = {
  type: 'line',
  data: {
    labels: ["January", "February", "March", "April", "May", "June", "July"],
    datasets: [{
       label: "My First dataset",
       data: [65, 0, 80, 81, 56, 85, 40],
       fill: false
    }]
   }
 };

    var ctx = document.getElementById("myChart").getContext("2d");
    var myChart = new Chart(ctx, config);

    labelsNew = ["Why", "u", "no", "work", "???"];
    dataNew = [2, 4, 5, 6, 10];

    function updateData(chart, label, data) {
      removeData();
      chart.data.labels.push(label);
      chart.data.datasets.forEach((dataset) => {
        dataset.data.push(data);
      });
      chart.update();
    };

function removeData(chart) {
    chart.data.labels.pop();
    chart.data.datasets.forEach((dataset) => {
        dataset.data.pop();
    });
    chart.update();
}

$('.button-container').on('click', 'button', updateData(myChart, labelsNew, dataNew));

2 个答案:

答案 0 :(得分:2)

我看到了两个问题:

    函数updateData()中的
  • 缺少removeData(chart);
  • 的图表参数
  • 点击处理按钮,使用简单: $("#btn").click(function() { updateData(myChart, labelsNew, dataNew) });

答案 1 :(得分:0)

我明白了。这有效:

function addData(chart, label, data) {
    chart.data.labels = label
    chart.data.datasets.forEach((dataset) => {
        dataset.data = data;
    });
    chart.update();
}

$("#btn").click(function() {
addData (myChart, labelsNew, dataNew);
});

而不是推送数据(增加),数据需要通过“=”分配。