Обновить диаграмму с помощью ChartJS - VueJS

поэтому у меня возникают проблемы при попытке обновить диаграмму с помощью VueJS и ChartJS. В настоящее время я выполняю запрос ajax (используя axios) и пытаюсь нарисовать диаграмму из возвращенных данных.

Проблема в том, что при попытке нарисовать диаграмму я получаю следующую ошибку: TypeError: Cannot read property 'getContext' of undefined at eval (App.vue?26cd:520). Я действительно не знаю, почему это происходит, я читал некоторые другие сообщения, но все еще не могу заставить его работать. Это код, который я использую:

<template>
  <button @click = "myFunction()">Click Me</button>
  <canvas ref = "myChart"></canvas>
</template>
-----------------------------------------------------------

methods: {
  myFunction () {
    var self = this

    axios.post('http://localhost/link/to/file.php', {
      // Post params here
    }).then(response => {
      var ctxChart = self.$refs.myChart.getContext('2d')

      var myChart = new Chart(ctxChart, {
        type: 'pie',
        data: {
          labels: ['Label 1', 'Label 2', 'Label 3', 'Label 4'],
          datasets: [{
            label: 'Label here',
            data: [response.data['data1'], response.data['data2'], response.data['data3'], response.data['data4']],
            backgroundColor: [
              'rgba(255, 99, 132, 0.2)',
              'rgba(54, 162, 235, 0.2)',
              'rgba(255, 206, 86, 0.2)',
              'rgba(75, 192, 192, 0.2)'
            ],
            borderColor: [
              'rgba(255,99,132,1)',
              'rgba(54, 162, 235, 1)',
              'rgba(255, 206, 86, 1)',
              'rgba(75, 192, 192, 1)'
            ],
            borderWidth: 1
          }]
        },
        options: {
        }
      })

    }).catch(e => {
      console.info(e)
    })
  }
}

Любая помощь приветствуется! :)

Установите точку останова и убедитесь, что myChart - это определенный $ref.

zero298 02.04.2018 18:26

Если это весь код, то проблемная строка - var ctxChart = self.$refs.myChart.getContext('2d'). Когда вы звоните в myFunction? Обязательно позвоните, если после установки

FrEaKmAn 02.04.2018 18:27

@FrEaKmAn Я называю это при нажатии кнопки @click = "myFunction()".

Brian Moreno 02.04.2018 18:28

@ zero298 Хмм, всякий раз, когда я делаю console.info(self.$refs), я вижу там свою ссылку на диаграмму. Но когда я использую console.info(self.$refs.myChart), я получаю Undefined.

Brian Moreno 02.04.2018 18:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
742
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня была аналогичная проблема. Решил накатав все nextTick

self.$nextTick(() => {
    var ctxChart = self.$refs.myChart.getContext('2d')
    ...
});

Спасибо! Это сработало отлично. Про nextTick() не знал.

Brian Moreno 02.04.2018 18:44

Другие вопросы по теме