vue-chart.js 不显示数据
vue-chart.js doesn't show data
这是Dijagram.vue(父组件)
<script>
import { Line } from 'vue-chartjs'
import config from "../config";
import axios from "axios";
export default {
extends: Line,
props: {
chartData: {
type: Array,
required: true,
},
chartLabels: {
type: Array,
required: true
}
},
data () {
return {
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
},
gridLines: {
display: true
}
}],
xAxes: [ {
gridLines: {
display: false
}
}]
},
legend: {
display: false
},
responsive: true,
maintainAspectRatio: false
}
}
},
mounted () {
this.renderChart({
labels: this.chartLabels,
datasets: [
{
label: 'downloads',
borderColor: '#249EBF',
pointBackgroundColor: 'white',
borderWidth: 1,
pointBorderColor: '#249EBF',
backgroundColor: 'transparent',
data: this.chartData
}
]
}, this.options)
},
}
</script>
这是子组件“DijagramPrikaz.vue”
<template>
<div class="container">
<line-chart
v-if="loaded"
:chartData="dani"
:chartLabels="asset"/>
</div>
</template>
<script>
import LineChart from './Dijagram.vue'
import config from "../config";
import Navbar from "@/components/Navbar.vue"
import { Component, Vue } from "vue-property-decorator";
import axios from "axios";
import router from "../router";
export default {
name: 'LineChartContainer',
components: { LineChart },
data: () => ({
loaded: false,
dani: [],
asset: [],
}),
async mounted () {
this.loaded = false
try {
axios.get(`${config.serverURL}/api/v1/dijagram`, {headers: {
'Access-Control-Allow-Origin': '*'}})
.then(response => {
this.dani = response.data.map(item => item.dani)
this.asset = response.data.map(item => item.asset.name)
})
this.loaded = true
} catch (e) {
console.error(e)
}
}
}
</script>
如您所见,数据缺失,标签为默认值。我有臭名昭著的“v-if=loaded”,所以我不知道这是问题还是其他问题(虽然我认为这可能与图表道具有关,但我不知道,因为我是新手).有人问过类似的问题,但据我所知,异步始终是问题所在,我认为我的情况并非如此。
谢谢
我找到了问题...最终是异步问题。我只是在 axios 请求之前添加了“await”,它起作用了。
这是Dijagram.vue(父组件)
<script>
import { Line } from 'vue-chartjs'
import config from "../config";
import axios from "axios";
export default {
extends: Line,
props: {
chartData: {
type: Array,
required: true,
},
chartLabels: {
type: Array,
required: true
}
},
data () {
return {
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
},
gridLines: {
display: true
}
}],
xAxes: [ {
gridLines: {
display: false
}
}]
},
legend: {
display: false
},
responsive: true,
maintainAspectRatio: false
}
}
},
mounted () {
this.renderChart({
labels: this.chartLabels,
datasets: [
{
label: 'downloads',
borderColor: '#249EBF',
pointBackgroundColor: 'white',
borderWidth: 1,
pointBorderColor: '#249EBF',
backgroundColor: 'transparent',
data: this.chartData
}
]
}, this.options)
},
}
</script>
这是子组件“DijagramPrikaz.vue”
<template>
<div class="container">
<line-chart
v-if="loaded"
:chartData="dani"
:chartLabels="asset"/>
</div>
</template>
<script>
import LineChart from './Dijagram.vue'
import config from "../config";
import Navbar from "@/components/Navbar.vue"
import { Component, Vue } from "vue-property-decorator";
import axios from "axios";
import router from "../router";
export default {
name: 'LineChartContainer',
components: { LineChart },
data: () => ({
loaded: false,
dani: [],
asset: [],
}),
async mounted () {
this.loaded = false
try {
axios.get(`${config.serverURL}/api/v1/dijagram`, {headers: {
'Access-Control-Allow-Origin': '*'}})
.then(response => {
this.dani = response.data.map(item => item.dani)
this.asset = response.data.map(item => item.asset.name)
})
this.loaded = true
} catch (e) {
console.error(e)
}
}
}
</script>
如您所见,数据缺失,标签为默认值。我有臭名昭著的“v-if=loaded”,所以我不知道这是问题还是其他问题(虽然我认为这可能与图表道具有关,但我不知道,因为我是新手).有人问过类似的问题,但据我所知,异步始终是问题所在,我认为我的情况并非如此。 谢谢
我找到了问题...最终是异步问题。我只是在 axios 请求之前添加了“await”,它起作用了。