How to clear a chart from a canvas so that hover events cannot be triggered?

后端 未结 21 1591
不思量自难忘°
不思量自难忘° 2020-11-28 20:07

I\'m using Chartjs to display a Line Chart and this works fine:

// get line chart canvas
var targetCanvas = document.getElementById(\'chartCanvas\').getConte         


        
相关标签:
21条回答
  • 2020-11-28 20:57

    This worked very well for me

        var ctx = $("#mycanvas");
         var LineGraph = new Chart(ctx, {
            type: 'line',
            data: chartdata});
            LineGraph.destroy();
    

    Use .destroy this to destroy any chart instances that are created. This will clean up any references stored to the chart object within Chart.js, along with any associated event listeners attached by Chart.js. This must be called before the canvas is reused for a new chart.

    0 讨论(0)
  • 2020-11-28 20:58

    If you are using chart.js in an Angular project with Typescript, the you can try the following;

    Import the library:
        import { Chart } from 'chart.js';
    
    In your Component Class declare the variable and define a method:
    
      chart: Chart;
    
      drawGraph(): void {
        if (this.chart) {
          this.chart.destroy();
        }
    
        this.chart = new Chart('myChart', {
           .........
        });
      }
    
    
    In HTML Template:
    <canvas id="myChart"></canvas>
    
    0 讨论(0)
  • 2020-11-28 20:58

    for those who like me use a function to create several graphics and want to update them a block too, only the function .destroy() worked for me, I would have liked to make an .update(), which seems cleaner but ... here is a code snippet that may help.

    var SNS_Chart = {};
    
    // IF LABELS IS EMPTY (after update my datas)
    if( labels.length != 0 ){
    
          if( Object.entries(SNS_Chart).length != 0 ){
    
                array_items_datas.forEach(function(for_item, k_arr){
                    SNS_Chart[''+for_item+''].destroy();
                });
    
           }
    
           // LOOP OVER ARRAY_ITEMS
           array_items_datas.forEach(function(for_item, k_arr){
    
                 // chart
                 OPTIONS.title.text = array_str[k_arr];
                 var elem = document.getElementById(for_item);
                 SNS_Chart[''+for_item+''] = new Chart(elem, {
                     type: 'doughnut',
                     data: {
                         labels: labels[''+for_item+''],
                         datasets: [{
                            // label: '',
                            backgroundColor: [
                                '#5b9aa0',
                                '#c6bcb6',
                                '#eeac99',
                                '#a79e84',
                                '#dbceb0',
                                '#8ca3a3',
                                '#82b74b',
                                '#454140',
                                '#c1502e',
                                '#bd5734'
                            ],
                            borderColor: '#757575',
                            borderWidth : 2,
                            // hoverBackgroundColor : '#616161',
                            data: datas[''+for_item+''],
                         }]
                     },
                     options: OPTIONS
    
                 });
                 // chart
           });
           // END LOOP ARRAY_ITEMS
    
      }
     // END IF LABELS IS EMPTY ...
    
    0 讨论(0)
  • 2020-11-28 20:59

    First put chart in some variable then history it next time before init

    #Check if myChart object exist then distort it

        if($scope.myChart) {
          $scope.myChart.destroy();
        }
    
        $scope.myChart  = new Chart(targetCanvas
    
    0 讨论(0)
  • 2020-11-28 21:01

    This is the only thing that worked for me:

    document.getElementById("chartContainer").innerHTML = '&nbsp;';
    document.getElementById("chartContainer").innerHTML = '<canvas id="myCanvas"></canvas>';
    var ctx = document.getElementById("myCanvas").getContext("2d");
    
    0 讨论(0)
  • 2020-11-28 21:03
    var myPieChart=null;
    
    function drawChart(objChart,data){
        if(myPieChart!=null){
            myPieChart.destroy();
        }
        // Get the context of the canvas element we want to select
        var ctx = objChart.getContext("2d");
        myPieChart = new Chart(ctx).Pie(data, {animateScale: true});
    }
    
    0 讨论(0)
提交回复
热议问题