我正在使用Vue.js和Chart.js绘制一些图表。每次调用该函数时generateChart()
,图表不会自动更新。当我在Vue Devtools中检查数据时,它们是正确的,但图表未反映数据。
有趣的事实:调整窗口大小时,图表正在更新。
- 我在做什么错了?
- 每次致电时如何更新图表
generateChart()
?
我认为这将object
与array
更改检测警告有关,但是我不确定该怎么做。
https://codepen.io/anon/pen/bWRVKB?editors=1010
<el-dialog title="Chart" v-model="showGeneratedChart">
<line-chart :chartData="dataChart"></line-chart>
</el-dialog>
export default{
data (){
const self = this;
return {
dataChart : {
labels : [],
datasets: [{
label: 'label',
backgroundColor: '#FC2525',
data: [0, 1, 2, 3, 4],
}]
}
}
}
generateChart() {
this.dataChart['labels'] = [];
this.dataChart['datasets'] = [];
... compute datasets and formattedLabels
this.dataChart['labels'] = formattedLabels;
this.dataChart['datasets'] = datasets;
}
LineChart.js
import { Line, mixins } from 'vue-chartjs'
export default Line.extend({
mixins: [mixins.reactiveProp],
props: ["options"],
mounted () {
this.renderChart(this.chartData, this.options)
}
})
将计算的属性用于图表数据。而不是调用
this.renderChart
watch,将其包装在方法中,mounted
然后在和中重用该方法watch
。You could also make the options a computed property, and if option not going to change much you can setup default props. https://vuejs.org/v2/guide/components.html#Prop-Validation
Here is a working codepen https://codepen.io/azs06/pen/KmqyaN?editors=1010