我正在使用 Vue.js 和 Chart.js 来绘制一些图表。每次我调用函数 generateChart()
时,图表都不会自动更新。当我检查 Vue Devtools 中的数据时,它们是正确的,但图表没有反映数据。但是,当我调整窗口大小时,图表会更新。
- 我在做什么有什么问题?
- 每次调用
generateChart()
时如何更新图表?
我觉得这将与 object
和 array
更改检测警告有关,但我不确定该怎么做。
https://codepen.io/anon/pen/bWRVKB?editors=1010
<template>
<el-dialog title="Chart" v-model="showGeneratedChart">
<line-chart :chartData="dataChart"></line-chart>
</el-dialog>
</template>
<script>
export default {
data() {
const self = this;
return {
dataChart: {
labels: [],
datasets: [
{
label: "label",
backgroundColor: "#FC2525",
data: [0, 1, 2, 3, 4],
},
],
},
};
},
methods: {
generateChart() {
this.dataChart["labels"] = [];
this.dataChart["datasets"] = [];
// ... compute datasets and formattedLabels
this.dataChart["labels"] = formattedLabels;
this.dataChart["datasets"] = datasets;
},
},
};
</script>
LineChart.js
import { Line, mixins } from 'vue-chartjs'
export default Line.extend({
mixins: [mixins.reactiveProp],
props: ["options"],
mounted () {
this.renderChart(this.chartData, this.options)
}
})
原文由 Léo Coco 发布,翻译遵循 CC BY-SA 4.0 许可协议
为图表数据使用计算属性。而不是在手表上调用
this.renderChart
将其包装在一个方法中并在mounted
和watch
上重用该方法。您还可以将选项设置为计算属性,如果选项不会发生太大变化,您可以设置默认道具。 https://v2.vuejs.org/v2/guide/components.html#Prop-Validation
这是一个工作的codepen https://codepen.io/azs06/pen/KmqyaN?editors=1010