Uncaught type error: mychart.update не является функцией - PullRequest
0 голосов
/ 18 апреля 2020

Я строю внешние кнопки для переключения видимости данных с диаграммы js, но это будет работать только при изменении размера экрана. Итак, я обнаружил, что можно использовать mychart.update () для решения проблемы. Но я получаю ошибку, которую я указал в заголовке.

Вот мой график:

var myRadarChart = {
    type: 'radar',
    data: {
            labels: lbl,
            datasets: [
                {
                    label: 'Houses',
                    data: yh,
                    backgroundColor:['rgba(0, 123, 255, 0.5)'],
                    borderColor: ['rgba(0, 123, 255, 0.8)'],
                    hidden:false
                },
                {
                    label: 'Apartments',
                    data: ya,
                    backgroundColor:['rgba(40,167,69, 0.5)'],
                    borderColor: ['rgba(40,167,69, 0.8)'],
                    hidden:false
                },
                {
                    label: 'Rooms',
                    data: yr,
                    backgroundColor:['rgba(218, 17, 61,0.5)'],
                    borderColor: ['rgba(218,17,61,0.8)'],
                    hidden:false
                }
            ]

        },
    options: {
        legend:{
            display:true,
            onHover: function(event, legendItem) {
            document.getElementById("myRadarChart").style.cursor = 'pointer';},
        },
        maintainAspectRatio:false,
        scale: {
            angleLines: {
                display: true
                },
            ticks: {
                suggestedMin: 0,
                suggestedMax: 0
                }
            }
        }
    };
var ctx = document.getElementById('myRadarChart').getContext('2d');
new Chart(ctx, myRadarChart);

И как я пытаюсь это сделать:

//Onclick
function getData(dontHide){
switch(dontHide){
        case 0:
            myRadarChart.data.datasets[0].hidden=false;
            myRadarChart.data.datasets[1].hidden=true;
            myRadarChart.data.datasets[2].hidden=true;
            myRadarChart.update();
            break;
        case 1:
            myRadarChart.data.datasets[0].hidden=true;
            myRadarChart.data.datasets[1].hidden=false;
            myRadarChart.data.datasets[2].hidden=true;
            myRadarChart.update();
            break;
        case 2:
            myRadarChart.data.datasets[0].hidden=true;
            myRadarChart.data.datasets[1].hidden=true;
            myRadarChart.data.datasets[2].hidden=false;
            myRadarChart.update();
            break;
    }
}

Или есть альтернативные способы сделать что-то подобное?

1 Ответ

0 голосов
/ 18 апреля 2020

Ваша проблема в том, что вы пытаетесь вызвать метод .update() для объекта config вашего графика, а не для фактического экземпляра графика. Как видите, myRadarChart - это просто объект, на нем нет метода с именем update(). Тем не менее, график, который вы создаете при выполнении new Chart(ctx, myRadarChart);, дает вам метод .update().

Чтобы решить вашу проблему, вам нужно сначала сохранить экземпляр вашего графика где-нибудь:

var radarGraph = new Chart(ctx, myRadarChart);

Затем обновите данные графика (а не непосредственно ваш объект конфигурации):

radarGraph.data.datasets[0].hidden = false;
...

Затем вызовите метод обновления для вашего radarGraph объекта:

radarGraph.update();
...