gpt4 book ai didi

javascript - Vue Chart.js - 图表在数据更改时不更新

转载 作者:可可西里 更新时间:2023-11-01 01:29:48 29 4
gpt4 key购买 nike

我正在使用 Vue.js 和 Chart.js 绘制一些图表。每次调用函数 generateChart() 时,图表都不会自动更新。当我检查 Vue Devtools 中的数据时,它们是正确的,但图表没有反射(reflect)数据。但是,当我调整窗口大小时图表会更新。

  • 我的做法有什么问题吗?
  • 如何在每次调用 generateChart() 时更新图表?

我觉得这将与 objectarray 变更检测注意事项相关,但我不确定该怎么做。

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>

折线图.js

import { Line, mixins } from 'vue-chartjs'

export default Line.extend({
mixins: [mixins.reactiveProp],
props: ["options"],
mounted () {
this.renderChart(this.chartData, this.options)
}
})

最佳答案

为图表数据使用计算属性。而不是在 watch 上调用 this.renderChart 将其包装在一个方法中,然后在 mountedwatch 中重用该方法。

Vue.component("line-chart", {
extends: VueChartJs.Line,
props: ["data", "options"],
mounted() {
this.renderLineChart();
},
computed: {
chartData: function() {
return this.data;
}
},
methods: {
renderLineChart: function() {
this.renderChart(
{
labels: [
"January",
"February",
"March",
"April",
"May",
"June",
"July"
],
datasets: [
{
label: "Data One",
backgroundColor: "#f87979",
data: this.chartData
}
]
},
{ responsive: true, maintainAspectRatio: false }
);
}
},
watch: {
data: function() {
this._chart.destroy();
//this.renderChart(this.data, this.options);
this.renderLineChart();
}
}
});

var vm = new Vue({
el: ".app",
data: {
message: "Hello World",
dataChart: [10, 39, 10, 40, 39, 0, 0],
test: [4, 4, 4, 4, 4, 4]
},
methods: {
changeData: function() {
this.dataChart = [6, 6, 3, 5, 5, 6];
}
}
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>Vue.jS Chart</title>
</head>
<body>
<div class="app">
{{ dataChart }}
<button v-on:click="changeData">Change data</button>
<line-chart :data="dataChart" :options="{responsive: true, maintainAspectRatio: false}"></line-chart>

</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.6/vue.min.js"></script>
<script src="https://unpkg.com/vue-chartjs@2.5.7-rc3/dist/vue-chartjs.full.min.js"></script>
</body>
</html>

您还可以将选项设置为计算属性,如果选项不会发生太大变化,您可以设置默认 Prop 。 https://v2.vuejs.org/v2/guide/components.html#Prop-Validation

这是一个工作代码笔 https://codepen.io/azs06/pen/KmqyaN?editors=1010

关于javascript - Vue Chart.js - 图表在数据更改时不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43728332/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com