Я не могу отобразить данные внутри своего графика.
WaveChart. js:
import { Line, mixins } from "vue-chartjs";
const { reactiveProp } = mixins;
import { mapGetters } from "vuex";
export default {
extends: Line,
mixins: [reactiveProp],
name: "WaveChart",
props: ["options", "chartData"],
computed: {
...mapGetters(["getZoom"])
},
mounted() {
this.renderChart(this.chartData, this.options);
},
methods: {
reRender() {
this.renderChart(this.chartData, this.options);
}
},
watch: {
options: {
deep: true,
handler: "reRender"
},
getZoom() {
this.reRender();
}
}
};
Wave. vue:
<template>
<WaveChart
id="line-chart"
:chartData="chartData"
:options="chartOptions"
:styles="waveChartStyle"
></WaveChart>
</template>
<script>
import WaveChart from "@/components/editorComponentsWidgets/chart/WaveChart";
import { broadcasterHubProxy } from "@/services/signalr_connection";
export default {
name: "Wave",
components: {
WaveChart
},
computed: {
...mapGetters(["getShouldFetch", "getZoom"]),
renderChartHeight() {
return (this.chartHeight * this.getZoom) / 100;
},
waveChartStyle() {
return {
height: `${this.renderChartHeight}px`,
width: "inherit",
position: "relative"
};
},
chartOptions() {
return {
lineWidth: 1,
elements: {
point: {
radius: 0
}
},
plugins: {
datalabels: {
display: false
},
filler: {
propagate: true
}
},
scales: {
xAxes: [
{
ticks: {
display: true
},
gridLines: {
color: "rgba(0, 0, 0, 0)"
}
}
],
yAxes: [
{
stacked: true,
ticks: {
callback: function(value) {
return value + "%";
},
min: this.minX,
max: this.maxX,
fontColor: this.labelColor,
fontSize: this.labelFontSize
},
gridLines: {
color: "rgba(0, 0, 0, 0)"
}
}
]
},
legend: { display: false },
tooltips: {
enabled: false
},
reactive: true,
responsive: true,
maintainAspectRatio: false
};
}
},
data() {
return {
render: true,
chartData: {
type: "line",
labels: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"],
datasets: [
{
label: "",
backgroundColor: "",
borderColor: "",
data: []
}
]
}
};
},
}
А вот функция для создания объекта chartData:
updateWave(wave) {
if (!wave) return;
this.chartData.datasets.length = 0;
wave.Categories.forEach(element => {
var datasets = {
label: element.Name,
backgroundColor: `rgba(${element.R}, ${element.G}, ${element.B}, 1)`,
borderColor: `rgba(${element.R}, ${element.G}, ${element.B}, 1)`,
data: element.Values
};
this.chartData.datasets.push(datasets);
});
}
Когда я смотрю на реквизиты в WaveChart. js с использованием Vue devtools, мне кажется, что у меня есть все необходимое:
chartData:Object
datasets:Array[12]
0:Object
backgroundColor:"rgba(0, 64, 128, 1)"
borderColor:"rgba(0, 64, 128, 1)"
data:Array[10]
label:"Broken Edge"
1:Object
2:Object
3:Object
4:Object
5:Object
6:Object
7:Object
8:Object
9:Object
10:Object
11:Object
labels:Array[10]
type:"line"
chartId:"line-chart"
cssClasses:""
height:400
options:Object
plugins:Array[0]
styles:Object
height:"282.6666666666667px"
position:"relative"
width:"inherit"
width:400
Я действительно не могу понять, почему я не вижу наборы данных. Vue 2.6.11, диаграмма. js 2.8.0, vue -chart js 3.5.0.
ОБНОВЛЕНИЕ: мне удалось отобразить мои наборы данных с помощью asyn c updateWave и добавить загруженное значение в данных. К сожалению, он не рендерится, когда я получаю новый dto.