在 vue 中从 chart.js 更新图表

丹尼尔M96

我的 vue 应用程序中有一个创建图表的函数。这是图表函数:

startChart: function (canvas, type) {

    // init chart.js
    var ctx = document.getElementById("myChart");
    var myDoughnut = new Chart(ctx, {
        type: 'doughnut',
        data: {
            labels: this.getAnalyticList[this.getRowIndex].chartNames,
            datasets: [{
                data: this.getAnalyticList[this.getRowIndex].chartData,
                backgroundColor: [
                    'rgba(255, 99, 132, 0.6)',
                    'rgba(54, 162, 235, 0.6)',
                    'rgba(255, 206, 86, 0.6)',
                    'rgba(75, 192, 192, 0.6)',
                    'rgba(153, 102, 255, 0.6)',
                    'red',
                    'yellow',
                    'blue',
                    'green',
                    'orange',
                    'teal',
                    'violet',
                    'pink',
                    'purple'
                ]
            }]
        },
        options: {
            responsive: true,
            defaultFontColor: '#ffffff',

        }
    })
}

然后我使用这一行在 vue 安装的钩子中启动它

this.startChart(this.$refs.canvas, 'Doughnut');

我想要做的是获取图表上方加载的表的行索引,然后将其传递到加载图表的 getAnalyticList 值中,以便我可以从同一列表中获取不同的数组。我正在创建一个更新函数,我从这篇堆栈文章中得到了这个js 小提琴我一直在尝试将他创建的函数调整到 vue 中,但我没有运气,这里的函数是:

changeData: function () {
            var myChart = Chart.doughnut(this.$refs.canvas, {
                data: data,
            });
            myChart.data.datasets.data = this.getAnalyticList[this.getRowIndex].chartData;
            myChart.data.labels = this.getAnalyticList[this.getRowIndex].chartNames;
            myChart.update();
        }

任何建议,将不胜感激。

一只狼

我认为您的代码唯一的问题是您没有正确更新数据集。随着myChart.data.datasets.data = ...您将数据添加到数据集对象-它应该是myChart.data.datasets[0].data = ...

我还在startChart没有反应性的情况下将图表对象添加到 Vue.js 模型中,因为它需要手动更新。只是不要将它添加到数据挂钩。因此,您可以this.myChart在更新方法中引用图表

getRowIndex在演示中重命名是因为rowIndex它更具可读性 - 您可以对getAnalyticsLists. 如果它是一种获取某些东西的方法,我会用 get-prefix 命名它。

在演示中向下滚动以使用下一步按钮切换数据。该按钮会增加rowIndex并在最后滚动。

请查看下面的演示或此jsfiddle

const chartComponent = {
  data() {
      return {
        //myChart: undefined, // don't add chart here -> reactivity could be a problem
        getAnalyticList: [{
          chartNames: [
            'Red',
            'Yellow',
            'Blue'
          ],
          chartData: [10, 20, 30]
        },
        {
          chartNames: [
            'Red',
            'Yellow',
            'Blue'
          ],
          chartData: [40, 10, 20]
        }
        ],
        rowIndex: 0
      }
    },
    template: `
    <div>
  	<canvas id="myChart" width="200px" height="200px"></canvas>
    <button @click="incRow">next</button>
    {{rowIndex}}
    </div>
  `,
    methods: {
      startChart: function() {
        var ctx = document.getElementById("myChart");
        var myDoughnut = this.myChart =  new Chart(ctx, {
          type: 'doughnut',
          data: {
            labels: this.getAnalyticList[this.rowIndex].chartNames,
            datasets: [{
              data: this.getAnalyticList[this.rowIndex].chartData,
              backgroundColor: [
                'rgba(255, 99, 132, 0.6)',
                'rgba(54, 162, 235, 0.6)',
                'rgba(255, 206, 86, 0.6)',
                'rgba(75, 192, 192, 0.6)',
                'rgba(153, 102, 255, 0.6)',
                'red',
                'yellow',
                'blue',
                'green',
                'orange',
                'teal',
                'violet',
                'pink',
                'purple'
              ]
            }]
          },
          options: {
            responsive: true,
            defaultFontColor: '#ffffff',
						
          }
        })
      },
      incRow () {
      	if (this.rowIndex < this.getAnalyticList.length - 1) {
        	this.rowIndex++;
        }
        else {
        	this.rowIndex = 0;
        }
        this.changeData()
      },
      changeData () {
      	this.myChart.data.datasets[0].data =
        	this.getAnalyticList[this.rowIndex].chartData;
        this.myChart.data.labels = this.getAnalyticList[this.rowIndex].chartNames;
        this.myChart.update();
        console.log('changed', this.myChart.data)
      }
    },
    mounted() {
      console.log('started')
      this.startChart();
    }
}

new Vue({
  el: '#app',
  components: {
    chart: chartComponent
  }
})
div {
   width: 400px;
   height: 400px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.bundle.min.js"></script>
<div id="app">
  <chart></chart>
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

vue.js 组件中的 Chart.js 图表不更新

来自分类Dev

更新chart.js和angular中的图表

来自分类Dev

动态更新Chart.js图表的值

来自分类Dev

使用Chart.js使用数据库中的数据实时更新图表

来自分类Dev

无法让Chart.js在Vue.js组件中运行

来自分类Dev

使用更新按钮(chart.js)将2个图表合并为1个图表

来自分类Dev

Chart.js中图表的默认颜色在哪里定义?

来自分类Dev

如何确定'chart.js'插件服务中的图表类型

来自分类Dev

在bulma全高英雄中显示chart.js图表

来自分类Dev

打开json文件以在chart.js中创建图表

来自分类Dev

chart.js 不会在 IE 中显示图表

来自分类Dev

Chart.Js - 图表栏中的背景栏

来自分类Dev

chart.js 在 IE11 中不显示图表

来自分类Dev

如何在Vue.js中使用Chart.js从API获取数据以显示图表

来自分类Dev

如何使用vue-chart.js对特定图表使用chartjs-plugin-datalabels

来自分类Dev

如何使用 $nextTick 在 vue.js 中渲染 Plotly 图表

来自分类Dev

更新 Vue.js 中的父类

来自分类Dev

Vue Js 中的数据/模型更新延迟

来自分类Dev

如何更新 vue.js 中的值?

来自分类Dev

在deck.js 中的过渡时重新渲染(或动画)chart.js 图表

来自分类Dev

如何只更新Chart.JS中的新数据?

来自分类Dev

为什么我的API中的数据没有显示在React中的chart.js图表上?

来自分类Dev

Chart.js在JSFiddle中运行,但不在本地“未定义图表”中

来自分类Dev

更改使用chart.js创建的图表中的轴线颜色

来自分类Dev

我的图表未使用流星中的chart.js显示在浏览器屏幕上

来自分类Dev

在Angular-chart.js中动态创建的画布上创建图表

来自分类Dev

为什么chart.js图表未在Safari中绘制数据(在Chrome中有效)

来自分类Dev

在混合图表中Chart.js不同的甜甜圈厚度

来自分类Dev

使用api中的数据初始化Chart.js图表

Related 相关文章

  1. 1

    vue.js 组件中的 Chart.js 图表不更新

  2. 2

    更新chart.js和angular中的图表

  3. 3

    动态更新Chart.js图表的值

  4. 4

    使用Chart.js使用数据库中的数据实时更新图表

  5. 5

    无法让Chart.js在Vue.js组件中运行

  6. 6

    使用更新按钮(chart.js)将2个图表合并为1个图表

  7. 7

    Chart.js中图表的默认颜色在哪里定义?

  8. 8

    如何确定'chart.js'插件服务中的图表类型

  9. 9

    在bulma全高英雄中显示chart.js图表

  10. 10

    打开json文件以在chart.js中创建图表

  11. 11

    chart.js 不会在 IE 中显示图表

  12. 12

    Chart.Js - 图表栏中的背景栏

  13. 13

    chart.js 在 IE11 中不显示图表

  14. 14

    如何在Vue.js中使用Chart.js从API获取数据以显示图表

  15. 15

    如何使用vue-chart.js对特定图表使用chartjs-plugin-datalabels

  16. 16

    如何使用 $nextTick 在 vue.js 中渲染 Plotly 图表

  17. 17

    更新 Vue.js 中的父类

  18. 18

    Vue Js 中的数据/模型更新延迟

  19. 19

    如何更新 vue.js 中的值?

  20. 20

    在deck.js 中的过渡时重新渲染(或动画)chart.js 图表

  21. 21

    如何只更新Chart.JS中的新数据?

  22. 22

    为什么我的API中的数据没有显示在React中的chart.js图表上?

  23. 23

    Chart.js在JSFiddle中运行,但不在本地“未定义图表”中

  24. 24

    更改使用chart.js创建的图表中的轴线颜色

  25. 25

    我的图表未使用流星中的chart.js显示在浏览器屏幕上

  26. 26

    在Angular-chart.js中动态创建的画布上创建图表

  27. 27

    为什么chart.js图表未在Safari中绘制数据(在Chrome中有效)

  28. 28

    在混合图表中Chart.js不同的甜甜圈厚度

  29. 29

    使用api中的数据初始化Chart.js图表

热门标签

归档