0
這個問題已被問了很多次,我經歷了其中的大部分,但沒有他們幫我找到了解決方案。圖js舊圖表數據沒有清除
我使用for循環生成幾個條形圖作爲報告功能的一部分。
我正在使用Express Handlebars的node.js。
我的頁面看起來像:
<div class="row report-charts">
<div class="col-md-12">
{{#buildings}}
<div class="col-md-6">
<h4>{{Name}}</h4>
<canvas id="{{idBuildings}}" width="200" height="80"></canvas>
</div>
{{/buildings}}
</div>
</div>
我的JS代碼如下所示:
$('.case-report-btn').click(function(){
$.ajax({
type: 'post',
url: '/reports/cases/filter',
data : {
StartDate : $('.start-ms-time-hidden').val(),
EndDate : $('.end-ms-time-hidden').val(),
ReportKey : $('.cases-filter-type').val()
},
dataType: 'json',
success: function(res) {
$('.report-charts').show();
for(key in res) {
var innerObj = res[key]; //gives the inner obj
var ctx = document.getElementById(key); //the idBuildings
var labels = [];
var data = [];
var buildingName = innerObj.Name;
for(innerKey in innerObj) {
if(innerKey != 'Name' && innerKey != 'Total') {
labels.push(innerKey);
data.push(innerObj[innerKey]);
}
}
var options = {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: buildingName,
data: data,
backgroundColor: 'rgba(255, 99, 132, 0.2)',
borderColor: 'rgba(255,99,132,1)',
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true,
fixedStepSize: 1
}
}]
}
}
}
var myChart = new Chart(ctx, options);
}
$('#pleaseWaitDialog').modal('hide');
},
error: function(err) {
$('#pleaseWaitDialog').modal('hide');
bootbox.alert('Error: ' + err);
}
});
});
所以基本上,我使用for循環生成頁面上的多個圖表。在循環內部,我聲明瞭圖表變量,每次更改報表參數並按下按鈕時,都會生成新圖表。但是當我盤旋在它上面時,舊的仍然出現。
現在我不知道我應該把myChart.destroy()
或myChart.clear()
方法。我也嘗試在for循環之外移動myChart聲明,但它也沒有幫助。
有關如何處理此問題的任何建議?
但我宣佈所有我的數據和標籤數組和新標籤,所以爲什麼我需要明確刪除舊數據? – codeinprogress
我用3個不同的選項回答你。你可以嘗試你想要的。如果您只想更改數據,也許乾淨並添加新數據是最好的方法。但是如果你想創建一個新的,第二個使用Chart.js函數。如果這些都不起作用,您可以刪除畫布並重新創建它... – piterio
刪除和添加畫布工作。謝謝。 – codeinprogress