К сожалению, я снова сталкиваюсь с некоторыми проблемами с реактивностью Vue.js.В настоящее время мой код отображает диаграмму один раз на mounted()
, а затем повторно отображает диаграмму каждый раз, когда данные обновляются благодаря наблюдателю.Это работает (за исключением того факта, что я не уверен, как удалить ранее отображенные графики), однако я не уверен, что это правильный способ сделать обновление, учитывая, что я использую Vue.Мне кажется, что уже обновленное обновление диаграммы при обновлении данных лучше, чем рендеринг целого нового графика и удаление старого.
Я попытался изменить данные с помощью this.data = the new data
, однако я знаю, чтоэто не сделает объект реактивным.Я также пытался использовать это. $ Set, как объяснено здесь - https://vuejs.org/v2/guide/reactivity.html, однако я ничего не добиваюсь с этим.Я мог бы не использовать это правильно, хотя.Я также попытался изменить только одно свойство объекта, которое также не влияло на график.
<template>
<div id="app">
<button @click="updateChart()">X</button>
<canvas id="myChart"></canvas>
</div>
</template>
<script>
export default {
data: function() {
return {
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3]
}],
}
}
},
methods: {
updateChart(){
this.data = {
labels: ['Red', 'Red', 'Red', 'Red', 'Red', 'Red'],
datasets: [{
label: 'EYOOOOOOOOOOOOOO',
data: [6, 7, 8, 9, 10, 11]
}],
}
/*this.$set(this.data, {
labels: ['Red', 'Red', 'Red', 'Red', 'Red', 'Red'],
datasets: [{
label: 'Please Work',
data: [6, 7, 8, 9, 10, 11]
}],
}))*/
/*this.$set(this.data, 'labels', ['Red', 'Red', 'Red', 'Red', 'Red', 'Red'])*/
},
renderChart(data, options){
var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {
type: 'bar',
data: data,
options: options
});
}
},
mounted() {
this.renderChart(this.data, this.options)
},
watch: {
data: function() {
this.renderChart(this.data, this.options)
}
}
}