2017-08-12 6 views
0

Ich arbeite mit Chart.js. Ich habe ein Diagramm, das die Daten anzeigen kann. Ich habe auch verschiedene Datensätze, die ich auf Knopfdruck austauschen möchte. Alle Datensätze sind in einem Array und sollten nur mit meiner Methode vertauscht werden. Sobald ich alle Werte geändert habe, rufe ich die update() Methode an. Nichts passiert!Chart.js chart.update() Methode macht nichts

Ich habe den Inhalt von char.data.datasets.data überprüft und es enthält tatsächlich die aktuellen Daten. Die einzige Sache ist, dass Chart.js nicht zu aktualisieren scheint.

Was fehlt mir hier?

Die Funktion, die das Diagramm aktualisiert:

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); 
    }); 
} 

Wenn Sie weitere Informationen benötigen, bitte lassen Sie mich wissen.

Antwort

1

chart.data.datasets ist ein Array von Datensätzen, nicht ein einzelnes Dataset. datasets hat keine eigenen data und label Attribute. Vielmehr hat jede einzelne dataset im Array ihre eigenen data und label Attribute. Sie können daher datasets.data oder dataset.label nicht tun. Wenn Sie die data oder label Variable eines bestimmten Datasets aktualisieren möchten, müssen Sie dieses Objekt aus dem Array auswählen. Um den ersten Datensatzes auszuwählen, verwenden Sie einfach datasets[0]:

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

Wenn Sie alle Datensätze zu aktualisieren, verwenden Sie eine forEach Schleife durch das Array zu durchlaufen:

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

Zwei weitere Punkte:

Ein anderes mögliches Problem ist, dass die names Variable nirgends initialisiert wird, obwohl es sein könnte, dass Sie gerade diesen Teil von t nicht eingeschlossen haben er Code in Ihrer Frage.

Auch, warum haben Sie die folgenden drei Zeilen Code, wenn Sie nur alle Werte in den nächsten drei Zeilen des Codes neu zuweisen?

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