2017-07-31 104 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,這是否意味着我的chart.update()也應該更改爲myChart.update()? – hyperfkcb

0

看來你圖表變量是重新聲明每次調用函數時,當你打電話plotchart因此將不會存在()。如果存在,建議您先聲明變量並將其放入正確的範圍。這似乎是你的問題的核心

+0

所以你的意思是聲明函數外的圖表變量?但是它不會導致未聲明的變量錯誤?上面給出的 – hyperfkcb

+0

確保您使用的是最新版本,並且是在外部聲明 – BanelingRush