Как обновить график с помощью VueJS и ChartJS - PullRequest
1 голос
/ 15 апреля 2019

Я пытаюсь обновить диаграмму, используя VueJS и ChartJS, и до сих пор я могу получить доступ ко всем свойствам объекта, но если я пытаюсь изменить свойство объекта, я получаю ошибку:

[Vue warn]: Error in mounted hook: "TypeError: _chart_data_js__WEBPACK_IMPORTED_MODULE_5__.planetChartData.update is not a function"

Я пошел в раздел учебных пособий ChartJS и выдает разделы, но не смог найти какой-либо ключ к решению этой проблемы. Что я нахожу странным, так это то, что функция «push» работает отлично. Пока что я попробую:

.vue file

<template>
            <div id="app" style="position: relative; height:500px; width:500px">
                <canvas :width="300" :height="300" id="planet-chart"></canvas>
            </div>


 </template>

...

import { mapActions, mapState } from 'vuex'
import Chart from 'chart.js';
import {planetChartData,pie} from './chart-data.js';
// import { mapActions } from 'vuex'
// import { connectionsAlive } from '../../api/mkt-api.js'
export default {
    mounted() {
        var x=this.createChart('planet-chart', this.planetChartData)
        planetChartData.data.labels.push('Janvier', 'Février')
        planetChartData.update();
    },
    data () {
        return {
            planetChartData: planetChartData,
        }
    },
    methods: {
        createChart(chartId, chartData) {
            const ctx = document.getElementById(chartId);
            const myChart = new Chart(ctx, {
            type: chartData.type,
            data: chartData.data,
            options: chartData.options,
            });
        }
    }
}
</script>

И файл .js

export const planetChartData = {
    type: 'bar',
    data: {
      labels: ['Janvier', 'Février', 'Mars', 'Avril'],
      datasets: [
        { // one line graph
          label: 'Number of users',
          data: [3018, 3407, 3109,1060],
          backgroundColor: [
            'rgba(54,73,93,.5)', // Blue
            'rgba(54,73,93,.5)',
            'rgba(54,73,93,.5)',
            'rgba(54,73,93,.5)'
          ],
          borderColor: [
            '#36495d',
            '#36495d',
            '#36495d',
            '#36495d'
          ],
          borderWidth: 3
        },
      ]
    },
    options: {
      responsive: true,
      lineTension: 1,
      scales: {
        yAxes: [{
          ticks: {
            beginAtZero: true,
            padding: 40,
          }
        }]
      }
    }
  }

Может быть, я использую неправильный синтаксис, если у кого-то есть идея, дайте мне знать, спасибо. Привет.

1 Ответ

2 голосов
/ 15 апреля 2019

В файле vue planetChartData - это ссылка на объект "planetChartData" из вашего файла js.Это не ссылка на диаграмму, которую вы создаете в createChart()

. Вы хотите вернуть созданный график, чтобы вы могли вызвать update() на нем:

createChart(chartId, chartData) {
  const ctx = document.getElementById(chartId);
  const myChart = new Chart(ctx, {
    type: chartData.type,
    data: chartData.data,
    options: chartData.options,
  });
  return myChart // <<< this returns the created chart
}

ТогдаВмонтированные вы можете сделать это:

var chart = this.createChart('planet-chart', planetChartData)
chart.update();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...