我正在使用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
没有自己的data
和label
属性。而是,数组中的每个单独的dataset
都有其自己的data
和label
属性。因此,您不能执行datasets.data
或dataset.label
。
如果要更新特定数据集的data
或label
变量,则需要从数组中选择该对象。要选择第一个数据集,只需使用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;