Я пытаюсь выполнить горячую замену типов диаграмм на основе изменений в поле выбора. Если данные необходимо обновить, они меняются.
Так, например, при загрузке страницы я создаю такую диаграмму:
var config = {
type: 'line',
data: {
labels: this.labels,
datasets: [{
label: 'Some Label',
data: this.values
}]
},
options: {
responsive: true
}
}
var context = document.getElementById('canvas').getContext('2d');
window.mychart = new Chart(context, config);
Но затем я меняю поле со списком на гистограмму. Я протестировал данные с гистограммой при загрузке страницы, и она отлично сработала.
Вот как я пытаюсь изменить график.
window.mychart.destroy();
// chartType = 'bar'
config.type = chartType;
var context = document.getElementById('canvas').getContext('2d');
window.mychart = new Chart(context, config);
window.mychart.update();
window.mychart.render();
Но ничего не происходит. График остается. Как я могу динамически изменять тип диаграммы? (Даже если это означает уничтожение и воссоздание холста диаграммы).
ОБНОВЛЕНИЕ
Обратите внимание: похоже, что он действительно разрушает диаграмму, но продолжает перерисовывать линейную диаграмму, хотя я делаю console.log(config.type);
, и он возвращает bar
, а не line
3 ответа
Исправление
- Уничтожьте старую диаграмму (чтобы удалить прослушиватели событий и очистить холст)
- Сделайте глубокую копию объекта конфигурации
- Изменить тип копии
- Передайте копию вместо исходного объекта.
Обзор примера:
var temp = jQuery.extend(true, {}, config);
temp.type = 'bar'; // The new chart type
myChart = new Chart(ctx, temp);
ПРИМЕЧАНИЕ. При использовании Chart.js версии 2.0.1.
Почему это работает
Chart.js изменяет переданный вами объект конфигурации. Из-за этого вы не можете просто изменить config.type. Вы можете войти в измененный объект и изменить все на нужный вам тип, но гораздо проще просто сохранить исходный объект конфигурации.
Альтернативное решение может быть таким же простым, как создание обеих диаграмм в отдельных элементах Div. Затем в соответствии с вашим условием просто сделайте один видимым и скройте другой в javascript. Это должно служить той цели, которая может быть у вас для изменения типа диаграммы в соответствии с вашими требованиями.
Просто чтобы убедиться, что теперь это исправлено в версии 2.1.3, за чем следует https://stackoverflow.com/users/ 239375 / Натан
document.getElementById('changeToLine').onclick = function() {
myChart.destroy();
myChart = new Chart(ctx, {
type: 'line',
data: chartData
});
};
Подтверждено исправлено в последней версии. Ознакомьтесь с http://codepen.io/anon/pen/ezJGPB и нажмите кнопку под диаграмму, чтобы изменить ее с гистограммы на линейную.
Похожие вопросы
Связанные вопросы
Новые вопросы
chart.js
Chart.js — это библиотека JavaScript с открытым исходным кодом для создания анимированных интерактивных диаграмм для включения на веб-страницы.