2017-08-12 353 views
0

我正在使用Chart.js。我有一個可以顯示數據的圖表。我也有不同的數據集,我想按下按鈕進行交換。 所有的數據集都在一個數組中,應該與我的方法互換。一旦我改變了所有的值,我打電話給update()方法。什麼都沒發生!Chart.js chart.update()方法沒有做任何事

我檢查了char.data.datasets.data的內容,它確實包含當前數據。唯一的一點是,Chart.js似乎不想更新。

我在這裏錯過了什麼?

,更新圖表的功能:

let getValues = function(dataset, label) 
{ 
    return firebase.database().ref("/data/" + dataset).once("value").then(function(snapshot) 
    { 
    var amazon = snapshot.val().Amazon; 
    var google = snapshot.val().Google; 
    var facebook = snapshot.val().Facebook; 
    var twitter = snapshot.val().Twitter; 


    chart.data.datasets.data = []; 
    chart.data.labels = []; 
    chart.data.datasets.label = null; 

    chart.data.datasets.data = [amazon, google, facebook, twitter]; 
    chart.data.labels = names; 
    chart.data.datasets.label = label; 
    chart.update(); 
    console.log(chart.data.datasets.data); 
    }); 
} 

如果您需要了解更多信息,請讓我知道。

回答

1

chart.data.datasets是一組數據集,而不是一個數據集。 datasets沒有自己的datalabel屬性。相反,陣列中的每個人dataset都有其自己的datalabel屬性。因此你不能做datasets.datadataset.label

如果要更新特定數據集的變量datalabel,則需要從數組中選擇該對象。選擇第一個數據集,只需使用datasets[0]

chart.data.datasets[0].data = [amazon, google, facebook, twitter]; 
chart.data.datasets[0].label = label; 

如果要更新所有數據集,使用forEach遍歷數組迭代:

chart.data.datasets.forEach((dataset) => { 
    dataset.data = [amazon, google, facebook, twitter]; 
    dataset.label = label; 
}); 

兩分:

另一個可能的問題是names變量沒有在任何地方初始化,儘管它可能是因爲你沒有包含t的那部分他在你的問題中編碼。

此外,爲什麼你有以下三行代碼,如果你只是在接下來的三行代碼中重新分配所有的值?

chart.data.datasets.data = []; 
chart.data.labels = []; 
chart.data.datasets.label = null;