我正在使用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);
  });
}

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

最佳答案

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;

如果要更新所有数据集,请使用forEach循环遍历数组:
chart.data.datasets.forEach((dataset) => {
    dataset.data = [amazon, google, facebook, twitter];
    dataset.label = label;
});

还有两点:

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

另外,如果只是在接下来的三行代码中重新分配所有值,为什么还要拥有以下三行代码?
chart.data.datasets.data = [];
chart.data.labels = [];
chart.data.datasets.label = null;

10-06 04:17