Chart.js chart.update() 方法没有做任何事情

Mar*_*che 5 javascript chart.js

我正在使用 Chart.js。我有一个可以显示数据的图表。我还有不同的数据集,我想在按下按钮时进行交换。所有数据集都在一个数组中,应该与我的方法互换。一旦我更改了所有值,我就会调用该update()方法。没发生什么事!

我检查了 的内容,char.data.datasets.data它实际上包含当前数据。唯一的问题是,Chart.js 似乎不想更新。

我在这里缺少什么?

更新图表的函数:

let getValues = function(dataset, label)
{
  return firebase.database().ref("/data/" + dataset).once("value").then(function(snapshot)
  {
    var amazon = snapshot.val().Amazon;
    var google = snapshot.val().Google;
    var facebook = snapshot.val().Facebook;
    var twitter = snapshot.val().Twitter;


    chart.data.datasets.data = [];
    chart.data.labels = [];
    chart.data.datasets.label = null;

    chart.data.datasets.data = [amazon, google, facebook, twitter];
    chart.data.labels = names;
    chart.data.datasets.label = label;
    chart.update();
    console.log(chart.data.datasets.data);
  });
}
Run Code Online (Sandbox Code Playgroud)

如果您需要更多信息,请告诉我。

Tot*_*Zam 6

chart.data.datasets是一组数据集,而不是单个数据集。datasets没有自己的datalabel属性。更确切地,每个单独的dataset阵列中有它自己的datalabel属性。因此,您不能执行datasets.datadataset.label

如果要更新特定数据集的datalabel变量,则需要从数组中选择该对象。要选择第一个数据集,只需使用datasets[0]

chart.data.datasets[0].data = [amazon, google, facebook, twitter];
chart.data.datasets[0].label = label;
Run Code Online (Sandbox Code Playgroud)

如果要更新所有数据集,请使用forEach循环遍历数组:

chart.data.datasets.forEach((dataset) => {
    dataset.data = [amazon, google, facebook, twitter];
    dataset.label = label;
});
Run Code Online (Sandbox Code Playgroud)

还有两点:

另一个可能的问题是names变量没有在任何地方初始化,尽管可能是您没有在问题中包含那部分代码。

另外,如果您只是重新分配接下来三行代码中的所有值,为什么会有以下三行代码?

chart.data.datasets.data = [];
chart.data.labels = [];
chart.data.datasets.label = null;
Run Code Online (Sandbox Code Playgroud)