Chart.js 标签问题
Chart.js Label Issue
所以我正在使用 Node.js Express.js 和 EJS 制作一个 COVID-19 跟踪器(针对印度地区)网络应用程序。所以我遇到的问题是在使用库 chart.js 创建图表时我正在使用这个 API 来获取数据 https://api.covid19india.org/data.json 。图表是针对 Y 轴和上的已确认病例总数X 轴日期(从大流行开始到现在的日期)
这些信息是从 api 中获取的。我正在使用 for 循环遍历数组并获取特定数据并将其推入空数组 dailyDateChnage=[], dailyCnf=[];
然后将此数据传递到 EJS 文件 analytics.ejs <%=dailyDateChnage%> <%=dailyCnf%>
const dailyDateChange=[],dailyCnf=[];
const url = "https://api.covid19india.org/data.json";
const covidDataApi = axios.get(url).then(function(response) {
covidData = response.data;
for (var i = 0; i < covidData.cases_time_series.length; i++) {
let day = covidData.cases_time_series[i].date;
let cnf = covidData.cases_time_series[i].totalconfirmed;
dailyDateChange.push(day);
dailyCnf.push(cnf);
}
app.get("/analytics", function(req, res) {
res.render("analytics", {
dailyDateChange: dailyDateChange,
dailyCnf: dailyCnf,
});
});
我使用文件 analytics.ejs chart.js 创建图表的代码
<canvas id="myChart"></canvas>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {
type: 'line',
data:{
labels:[<%=dailyDateChange%>],
datasets: [{
label: 'Daily Confirmed Cases',
data: [<%=dailyCnf%>],
fill:false,
backgroundColor: [
"red"
],
borderColor: [
"red"
],
borderWidth: 2,
pointBorderColor:"red",
pointBackgroundColor:"red",
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
}
});
</script>
标签:<%=dailyDateChange%> 使用此标签图表未呈现[这里是数据正在发送但未呈现的源页面的图像2 and an image of the output
但是当将标签替换为 labels:<%=dailyCnf%> 时,图表正在呈现。 image after replacing the labels
而且我尝试将日期数据转换为字符串并将日期数据转换为毫秒,然后再次将其转换为字符串
没有什么对我有用。
我什至不明白这是什么问题
有人可以解释并为此提供解决方案吗?
当使用 <%= %>
打印 dailyDateChange
时,它只是 "prints" 作为输出。考虑一下:您将 console.log 与字符串元素一起使用 - 在输出中不会在其周围加上双引号。
但是在您的代码中,您需要用双引号将标签的值括起来。
目前你可能会得到这样的东西:
labels: [10 April, 11 April]
当你需要这个时:
labels: ["10 April", "11 April"]
最简单的方法是通过 JSON.stringify
转换它并改用 <%- %>`。 - 标记(而不是 =)不会对字符串进行转义。
此代码应该适合您:
labels: <%- JSON.stringify(dailyDateChange) %>
请注意,我还从 around label 中删除了 [],因为 Stringify 为我们做了这件事。
所以我正在使用 Node.js Express.js 和 EJS 制作一个 COVID-19 跟踪器(针对印度地区)网络应用程序。所以我遇到的问题是在使用库 chart.js 创建图表时我正在使用这个 API 来获取数据 https://api.covid19india.org/data.json 。图表是针对 Y 轴和上的已确认病例总数X 轴日期(从大流行开始到现在的日期)
这些信息是从 api 中获取的。我正在使用 for 循环遍历数组并获取特定数据并将其推入空数组 dailyDateChnage=[], dailyCnf=[];
然后将此数据传递到 EJS 文件 analytics.ejs <%=dailyDateChnage%> <%=dailyCnf%>
const dailyDateChange=[],dailyCnf=[];
const url = "https://api.covid19india.org/data.json";
const covidDataApi = axios.get(url).then(function(response) {
covidData = response.data;
for (var i = 0; i < covidData.cases_time_series.length; i++) {
let day = covidData.cases_time_series[i].date;
let cnf = covidData.cases_time_series[i].totalconfirmed;
dailyDateChange.push(day);
dailyCnf.push(cnf);
}
app.get("/analytics", function(req, res) {
res.render("analytics", {
dailyDateChange: dailyDateChange,
dailyCnf: dailyCnf,
});
});
我使用文件 analytics.ejs chart.js 创建图表的代码
<canvas id="myChart"></canvas>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {
type: 'line',
data:{
labels:[<%=dailyDateChange%>],
datasets: [{
label: 'Daily Confirmed Cases',
data: [<%=dailyCnf%>],
fill:false,
backgroundColor: [
"red"
],
borderColor: [
"red"
],
borderWidth: 2,
pointBorderColor:"red",
pointBackgroundColor:"red",
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
}
});
</script>
标签:<%=dailyDateChange%> 使用此标签图表未呈现[这里是数据正在发送但未呈现的源页面的图像2 and an image of the output 但是当将标签替换为 labels:<%=dailyCnf%> 时,图表正在呈现。 image after replacing the labels
而且我尝试将日期数据转换为字符串并将日期数据转换为毫秒,然后再次将其转换为字符串 没有什么对我有用。 我什至不明白这是什么问题 有人可以解释并为此提供解决方案吗?
当使用 <%= %>
打印 dailyDateChange
时,它只是 "prints" 作为输出。考虑一下:您将 console.log 与字符串元素一起使用 - 在输出中不会在其周围加上双引号。
但是在您的代码中,您需要用双引号将标签的值括起来。
目前你可能会得到这样的东西:
labels: [10 April, 11 April]
当你需要这个时:
labels: ["10 April", "11 April"]
最简单的方法是通过 JSON.stringify
转换它并改用 <%- %>`。 - 标记(而不是 =)不会对字符串进行转义。
此代码应该适合您:
labels: <%- JSON.stringify(dailyDateChange) %>
请注意,我还从 around label 中删除了 [],因为 Stringify 为我们做了这件事。