반응형
vue-chart.js /vuex: vuex 상태가 변경될 때 차트가 업데이트되지 않음
나는 vue-chart.js, Chart.js를 사용하고 vuex 상태 내의 값을 사용하여 도넛 차트를 만들었다.차트는 vuex 상태가 업데이트될 때 차트가 업데이트되지 않을 때와 별도로 작동한다.
나는 차트를 최신 상태로 유지하기 위해 계산된 속성을 사용하려고 노력해왔다.하지만 그 때 다음과 같은 오류가 발생한다.
Error in callback for watcher "chartData": "TypeError: Cannot set property 'data' of undefined"
TypeError: Cannot set property 'data' of undefined
도넛차트.vue:
<script>
import { Doughnut, mixins } from 'vue-chartjs';
const { reactiveProp } = mixins;
export default {
extends: Doughnut,
mixins: [reactiveProp],
props: ['chartData', 'options'],
mounted () {
this.renderChart(this.chartdata, this.options)
}
}
</script>
앱차트.vue:
<template>
<div id="chart_section">
<h2 class="section_heading">Charts</h2>
<div id="charts">
<DoughnutChart :chart-data="datacollection" :options="chartOptions" class="chart"></DoughnutChart>
</div>
</div>
</template>
<script>
import DoughnutChart from './DoughnutChart';
import { mapGetters } from 'vuex';
export default {
components: {
DoughnutChart
},
computed: {
...mapGetters(['boardColumnData']),
datacollection() {
return {
datasets: [{
data: [this.boardColumnData[0].total.$numberDecimal, this.boardColumnData[1].total.$numberDecimal, this.boardColumnData[2].total.$numberDecimal, this.boardColumnData[3].total.$numberDecimal],
backgroundColor: [
'#83dd1a',
'#d5d814',
'#fdab2f',
'#1ad4dd'
],
borderColor: [
'#83dd1a',
'#d5d814',
'#fdab2f',
'#1ad4dd'
],
}]
}
},
},
data() {
return {
chartOptions: null
}
},
mounted () {
this.fillData();
},
methods: {
fillData() {
this.chartOptions = {
responsive: true,
maintainAspectRatio: false
}
}
}
}
</script>
상태 확인 후 boardColumnData의 모양:
[
{
"name":"Opportunities",
"percentage":{
"$numberDecimal":"0"
},
"total":{
"$numberDecimal":70269
}
},
{
"name":"Prospects",
"percentage":{
"$numberDecimal":"0.25"
},
"total":{
"$numberDecimal":0
}
},
{
"name":"Proposals",
"percentage":{
"$numberDecimal":"0.5"
},
"total":{
"$numberDecimal":5376
}
},
{
"name":"Presentations",
"percentage":{
"$numberDecimal":"0.75"
},
"total":{
"$numberDecimal":21480
}
},
]
$numDecimal 값은 다른 구성 요소에서 이벤트가 발생할 때 vuex 내에서 업데이트되는 값이다.이러한 값이 변경되면 차트를 새 값으로 업데이트하십시오.
소포 안의 자료를 넘겨야 한다.즉, 가장 빠른 해결책은fillData()
답례하다datacollection
올바른 형식으로
예시
fillData(){
return {
datasets: [
{
data: [
this.boardColumnData[0].total.$numberDecimal,
this.boardColumnData[1].total.$numberDecimal,
this.boardColumnData[2].total.$numberDecimal,
this.boardColumnData[3].total.$numberDecimal,
],
backgroundColor: ["#83dd1a", "#d5d814", "#fdab2f", "#1ad4dd"],
borderColor: ["#83dd1a", "#d5d814", "#fdab2f", "#1ad4dd"],
},
];
}
}
옵션에 대해서도 같은 작업을 수행해야 하지만 새 옵션으로 전달하십시오.options=yourOptions()
받침대
이것은 나를 완전히 바보로 만들었다.나는 이것이 여전히 당신(또는 다른 누군가)
반응형
'programing' 카테고리의 다른 글
16진수 숫자 앞에 0x가 붙는 이유는? (0) | 2022.04.19 |
---|---|
Vue Chart.js와 함께 API 데이터를 사용하는 방법 (0) | 2022.04.19 |
오류 'CR' 더 예쁘거나 예쁜 Visual Studio 코드 삭제 (0) | 2022.04.19 |
Vue - 외부 제어를 기반으로 동적으로 활성화하는 방법 (0) | 2022.04.19 |
VueJS에서 테스트를 실행할 때 오류 발생: 경로 탐색 중 검색되지 않은 오류 (0) | 2022.04.19 |