Так что я довольно новичок в Vue.js и хотел бы отобразить динамически отображаемый график на странице.Пока у меня есть
/*/barChart.js
import { Bar, mixins } from 'vue-chartjs'
const { reactiveProp } = mixins
export default {
extends: Bar,
mixins: [reactiveProp],
props: ['options'],
mounted () {
this.renderChart(this.chartData, this.options)
},
}
И в моем основном файле Vue
/*/stats.js
const stats = new Vue({
el: '#app',
components:{
"bar-chart": barChart,
},
data: function () {
return {
chartData: {},
charOptions: {},
}
},
watch:{
campaignIds: function(){
this.fillInStats();
}
},
methods: {
fillInStats: function(){
//here I'd like to push data in the chart or remove them depending on a list of Id's.
}
},
//etc
}
Так что, когда я обновляю данные «вручную» (путем непосредственной установки this.chartData
), происходит обновление, ноЯ не могу заставить его работать гладко. документация говорит, что нужно использовать такую функцию, как
function addData(chart, label, data) {
chart.data.labels.push(label);
chart.data.datasets.forEach((dataset) => {
dataset.data.push(data);
});
chart.update();
}
, и у меня нет проблем с тем, чтобы заставить работать this.chartData.labels.push(label)
, но я не уверен, как правильно вызвать chart.update()
в моемслучай (я все еще не знаком со структурой представления).
Это HTML:
<div class="card-body">
<bar-chart :chart-data="chartData" :options="chartOptions" :height="100"></bar-chart>
</div>
Редактировать
Я сделал этодобавьте
data: function () {
return {
chartData:{labels: ['Destinataires', 'Non-envoyés', 'Non-lus', 'Lus'], datasets: [{label: '', backgroundColor: 'white', data: [0, 0, 0, 0]}]},
chartOptions: {scales: {yAxes: [{ticks: {beginAtZero:true}}]}},
dataSets: [],
//etc
}
},
и обновите данные следующим образом:
addInStats: function(id){
let color = this.pickColor();
let dataSet = {
label: this.campaignsList[id].name,
backgroundColor: color,
data: [this.subscriberCountArray[id], this.nonSentCountArray[id], this.nonReadCountArray[id], this.readCountArray[id]]
};
this.dataSets.push(dataSet);
this.chartData = {
labels: ['Destinataires', 'Non-envoyés', 'Non-lus', 'Lus'],
datasets: this.dataSets,
};
},
, но теперь, когда я добавил данные несколько раз, весь график становится пустым