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)
如果您需要更多信息,请告诉我。
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;
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)
| 归档时间: |
|
| 查看次数: |
7796 次 |
| 最近记录: |