javascript - 如何将 Firestore 数据推送到 ChartJS?
问题描述
我在将数据从 Firestore 数据绘制到 ChartJS 时遇到问题。出于某种原因,它仅在图表底部显示单个值,并在 y 轴上显示随机数而不是日期。我希望有一个人可以帮助我。我的火库:火库 我的图表:图表
这是我到目前为止所拥有的。
db.collection('Items').get().then((snapshot) => {
snapshot.docs.forEach(doc => {
var item= doc.data();
var price= item.price;
var date = item.date;
var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: [date],
datasets: [{
label: 'Items',
data: [price],
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
},
// Container for pan options
pan: {
// Boolean to enable panning
enabled: true,
// Panning directions.
mode: 'x',
speed: 1
},
// Container for zoom options
zoom: {
// enable zooming
enabled: true,
// Zooming directions.
mode: 'x',
}
}
});
})
})
解决方案
对于您正在做doc
的每一件事,每次都创建一个新图表。snapshot
var myChart = new Chart()
您应该在 中构建您的data
和labels
数组,forEach
然后(在该之外forEach
)创建一个新图表并将其传递给数组。
类似于以下内容(未测试):
var labelsArray = [];
var dataArray = [];
db.collection('Items').get().then((snapshot) => {
snapshot.docs.forEach(doc => {
var item = doc.data();
var price = item.price;
dataArray.push(price);
var date = item.date;
labelsArray.push(date);
});
});
var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: labelsArray,
datasets: [{
label: 'Items',
data: dataArray ,
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
},
// Container for pan options
pan: {
// Boolean to enable panning
enabled: true,
// Panning directions.
mode: 'x',
speed: 1
},
// Container for zoom options
zoom: {
// enable zooming
enabled: true,
// Zooming directions.
mode: 'x',
}
}
});
推荐阅读
- python - 在没有警告的情况下替换和填充列
- angular - 检查特定文本的 iframe 内容
- c - GCC 是否推断函数的返回语句?
- python - TypeError:“str”对象不支持迭代中的项目分配
- racket - 定义一个函数来表示 Church 数字中的整数 (DrRacket)
- reactjs - NextJS 动态路由在第一次加载时工作,但在刷新时失败
- javascript - 在 iframe 中动态显示网页
- arrays - 使用 .map 和 .filter 过滤现有数组以创建新的过滤数组
- python-3.x - 保护对象内的数据
- javascript - 如何防止未分配的变量显示未定义?