2017-09-14 41 views
1

我有以下錯誤:TypeError:無法讀取未定義的屬性'skip'。Angular ASP.NET Core Chart.js在過濾值列表時重建圖表時出現錯誤

我有一個方法,在我的應用程序中建立一個圖表。出現這種情況的OnInit

var ctx = document.getElementById("myChart"); 
var chartInstance = new Chart(ctx); 
var myChart = new Chart(ctx, { 
    type: 'line', 
    data: { 
    labels :this.equity, 
    datasets: [{ 
     data: this.equity 
    }] 
    } 
}); 

}

this.equity是,我使用來自服務器的數據的客戶端側計算值的陣列。這是我稍後過濾的列表。

一切都很順利,直到我開始過濾。該圖表是建立在列表中的值上的。我編寫了一個過濾器,用各種選項過濾列表。在每次過濾結束時,我再次調用上面的方法來重建圖表。

現在,這裏是奇怪的事情開始發生。圖表順利重建。我用不同的選項過濾很多次,然後在某個時刻繁榮,我得到這個錯誤!當我按下過濾器時,它不會在某個特定時刻發生,它只會發生。

我認爲這是因爲每次我創建一個新的圖表對象併爲其提供新值。值的變量與舊對象相同,並且會導致錯誤,因爲在某個時間點,Angular會檢出舊對象,並且它已經有一個與舊列表不匹配的新值列表。

這對任何人都有好處嗎?現在是否有人在創建新圖表對象的時候如何清空舊圖表對象,這樣可以解決這個問題?謝謝!

回答

1

嘗試使用destroy()方法銷燬舊圖表實例,然後再創建新圖表實例。

... 
if (myChart) myChart.destroy(); 
myChart = new Chart(ctx, { 
     type: 'line', 
     ... 
... 

請確保該myChart變量是全球訪問

然而,更好的辦法是使用update()方法,當你添加/更新您的圖表中的任何數據來更新圖表,而不是每次創建一個新的圖表實例。

+0

謝謝。似乎這是行得通的。它也似乎你應該摧毀圖表對象時離開的頁面(組件),因爲現在我沒有得到錯誤的過濾,但如果我離開,回來後,他們出現一會兒。 –

+0

是的!到現在爲止還挺好。更新()過濾並使用此if(myChart)myChart.destroy();是OnInit()。 –

相關問題