我是新的Vuejs,我想知道如何从我的API获取数据来显示图表。
下面是我的代码,我已经使用数据作为“日期和挑战”,并直接向它提供数据,但现在我想调用我的API,并从它向“日期和挑战”提供数据。
代码,我用它来显示图表没有API:
<template>
<canvas id="mychart" width="550" height="300"></canvas>
</template>
<script>
export default {
name: 'Chart',
data: () => ({
date: [
1600934100.0,
1602009600.0,
1602747060.0,
1603050158.390939,
1603305573.992575
],
challenge: [
9.0,
9.5,
2.5,
11.52,
12.4
]
}),
mounted () {
// eslint-disable-next-line no-unused-vars
const data = this.date.map((date, index) => ({
x: new Date(date * 1000),
y: this.challenge[index]
}))
const ctx = document.getElementById('mychart').getContext('2d')
// eslint-disable-next-line no-undef,no-unused-vars
const Chart_2 = new Chart(ctx, {
type: 'line',
data: {
datasets: [
{
data,
label: 'Chart from API ',
borderColor: '#7367F0'
}
]
},
options: {
scales: {
xAxes: [
{
type: 'time',
time: {
unit: 'month',
displayFormats: {
month: 'MMM YYYY'
}
}
}
],
yAxes: [
{
ticks: {
// eslint-disable-next-line no-unused-vars
callback (value, index, values) {
return `${value }%`
}
}
}
]
}
}
})
}
}
</script>
我知道要获取API,我们使用“axios”或“fetch”,所以每当我获取API并执行console.log(response.data)时,我都会在浏览器的控制台中获取数据,但进一步来说,我不知道如何Map它并使用这些数据来提供“日期和挑战”以显示图表。
以下是我的API:
我的API,其中包含数据:https://api.wirespec.dev/wirespec/stackoverflow/fetchchartdataforvuejs
请有人帮助我显示图表使用我的API在我的代码。
3条答案
按热度按时间hpcdzsge1#
您试过这种吗?
解决方案1
添加
async/await
,以便它将等待数据填充到data
和challege
。也可以从其他组件的API中获取数据,并将
date
和challege
作为props发送给该组件。解决方案2
我假设您有图表组件
chart.vue
chart.vue
在其他组件中,导入chart.vue
在chart.vue中,从
data
中删除date
和challege
,因为您将拥有props
,因为最佳实践props
和data
不能具有相同的属性名称。在导入chart.vue的其他组件中,只需像往常一样获取数据。
当我在我的项目中使用chartjs时,我总是添加
v-if
,它会让axios首先获取数据,然后重新挂载图表组件。因为我猜chartjs对vuejs的数据变化没有React,所以需要先更新数据,然后再重新挂载。k2arahey2#
终于,我得到了答案!
我分享,我是如何做到这一点,甚至你可以做同样的,以可视化图表与您的API数据。
bvn4nwqk3#
您可以使用
vue-chartjs
,它是Vue中Chart.js的 Package 器。安装在
npm
包管理器上。根据文档,从异步API端点访问数据时存在一个常见问题:
这种方法的问题在于Chart.js会尝试同步地呈现图表和访问图表数据,因此图表会在API数据到达之前挂载。
为了防止这种情况,简单的
v-if
是最好的解决方案。下面的Vue组件使用一个布尔变量在数据到达之前停止图表挂载。关键是只有当数据成功到达时才呈现条形图。这是通过将
loaded
变量设置为true来实现的。请注意,每当新数据到达时,您需要重新加载页面。