J'ai vu ce code: http://jsfiddle.net/AVygG/
Je suis curieux de savoir à quel moment le highchart est complètement chargé? J'ai vu dans la documentation des highcharts que les événements: load: devraient faire la magie de pouvoir appeler la fonction de rappel lorsque le highchart est complètement chargé.
S'il était complètement chargé, puis-je supposer que le graphique var devrait déjà avoir les valeurs lorsque l'alerte apparaît? Est-ce une bonne base que le graphique est déjà chargé?
La raison pour laquelle j'ai demandé est que je travaille sur un autre code que le highchart ne se charge apparemment pas complètement dans IE8. On dirait que les highcharts ont potentiellement une condition de concurrence sur le chargement de ses éléments.
Merci!
$(function () {
// create the chart
var chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
events: {
load: function(event) {
alert ('Chart loaded');
}
}
},
xAxis: {
},
series: [{
animation: false,
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
}]
});
}); La
Highcharts a une fonction de rappel
var chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
events: {
redraw: function(event) {
alert ('Chart loaded');
}
}
},
series: [{
animation: false,
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
}]
},function(chart){
alert('LOADED');
});
Dans la fonction de rappel de chargement, vous pouvez accéder à l'objet de graphique en utilisant le pointeur "this".
events: {
load: function(event) {
alert ('Chart loaded with series :'+ this.series[0].name);
console.log(this);
}
}
JsFiddle: http://jsfiddle.net/msjaiswal/AVygG/25/
Essayez avec l'événement redraw
. Cet événement est déclenché après le chargement, mais aussi après l'ajout de la série et le redimensionnement du graphique.
$(function () {
// create the chart
var chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
events: {
redraw: function(event) {
alert ('Chart loaded');
}
}
},
series: [{
animation: false,
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
}]
});
});
Redessiner l'événement à partir de la référence officielle des Highcharts: http://api.highcharts.com/highcharts#chart.events.redraw
On y a répondu, mais pas assez catégoriquement. La documentation Highcharts dit explicitement
... Dans la plupart des cas, le graphique est construit dans un seul thread, mais dans Internet Explorer version 8 ou moins, le graphique est parfois lancé avant que le document ne soit prêt, et dans ces cas, l'objet graphique ne sera pas terminé directement après l'appel de la fonction
new Highcharts.Chart()
. Par conséquent, le code qui repose sur l'objet Chart nouvellement construit doit toujours s'exécuter dans le rappel.
Donc, traiter l'objet graphique dans IE8 doit être fait dans le rappel, c'est-à-dire new Highcharts.Chart(options, function(chart) { ... })
. Vous pouvez également utiliser function() { ... }
et utiliser this
dans la fonction.
En ce qui concerne votre préoccupation spécifique concernant un message de chargement. Je devais le faire dans le rappel, mais ça marche.
chart1 = new Highcharts.Chart(options, function(){
this.showLoading();
});
Dans le projet angular, j'ai dû utiliser la fonction setTimeout()
pour que la largeur fonctionne correctement comme ci-dessous:
setTimeout(()=>this.chart.reflow())