2017-07-31 5 views
1

chart.jsを使用してドーナツチャートに問題が発生していました。問題は、グラフを更新するときです。グラフ上にカーソルを合わせると、古いグラフが表示されることがあります。私はチャートをプロットする関数を呼び出すのはここです:グラフjsは、ホバー時の古いグラフデータを表示します

<select class="form-control" id="ddlCategory" onchange="plotChart()">  
</select> 

function plotChart(){ 
// removed code to retrieve data from firebase 
var chart; 
var ctx = document.getElementById('donutChart').getContext("2d"); 
var data = {}; 
var opt = { 
      type: "doughnut", 
      data: data, 
      options: options 
     }; 

     if (chart) { 
      chart.destroy(); 
      chart.clear(); 
     }else{ 
      chart = new Chart(ctx,opt); 
     } 
for(var i = 0; i < labelData.length; i++){ 
     chart.config.data.labels.push(labelData[i]); 
    } 
chart.update(); 
} 

私はそれを更新する前に、前のチャートを破壊しようとしたが、無駄に。何か案は?

答えて

1

実際には、前のチャートを破棄する必要があります。おそらく、次のように試してみてください。

function plotChart() { 
    // removed code to retrieve data from firebase 

    var ctx = document.getElementById('donutChart').getContext("2d"); 
    var data = {}; 
    var opt = { 
     type: "doughnut", 
     data: data, 
     options: options 
    }; 

    if (chart) chart.chart.destroy(); 
    window.chart = new Chart(ctx, opt); 

    for (var i = 0; i < labelData.length; i++) { 
     chart.config.data.labels.push(labelData[i]); 
    } 
    chart.update(); 
} 
+0

myChart変数はどこで宣言しましたか? – hyperfkcb

+0

ここをクリック> 'window.myChart = ...'、関数の外で宣言することもできます –

+0

myChart変数が定義されていませんエラーメッセージです。また、myChartを宣言することで、my.update()もmyChart.update()に変更する必要がありますか? – hyperfkcb

0

あなたのチャート変数が)関数が呼び出され、したがって、あなたがplotchart(呼び出すときに存在することはありません毎回再宣言されているようです。以前に変数を宣言し、存在する場合は正しいスコープにインポートすることをお勧めします。それはあなたの問題の中核であるようです。

+0

関数の外にグラフ変数を宣言することは意味しますか?しかし、それは宣言されていない可変エラーにつながるだろうか? – hyperfkcb

+0

上記のように、最新バージョンを使用していることを確認してください。はい、外部に宣言してください – BanelingRush

関連する問題