Nella nostra app Angolare stiamo usando highcarts-ng per l'implementazione HighCharts.HighCharts: Come utilizzare il reflow per consentire il ridimensionamento automatico dopo aver modificato la dimensione
Ecco la Carta ingrandire e ridurre la funzione, che funziona:
function expandChartPanel() {
vm.chartMaxed = !vm.chartMaxed;
viewHeader = ScopeFactory.getScope('viewHeader');
highChart = ScopeFactory.getScope('highChart');
var chart = highChart.chartObject;
var highChartContainer = document.getElementById("highchart-container");
var highChartContainerWidth = document.getElementById('highchart-container').clientWidth;
var highChartContainerHeight = document.getElementById('highchart-container').clientHeight;
var windowWidth = window.innerWidth;
var windowHeight = window.innerHeight;
if (vm.chartMaxed) {
vs.savedWidth = highChartContainerWidth;
vs.savedHeight = highChartContainerHeight;
console.log('savedWidth = ', vs.savedWidth);
console.log('savedHeight = ', vs.savedHeight);
root.chartExpanded = true;
viewHeader.vh.chartExpanded = true;
highChart.highChartMax = true;
highChartContainerHeight = document.getElementById('highchart-container').clientHeight;
windowWidth = window.innerWidth;
windowHeight = window.innerHeight;
highChart.chartConfig.size.width = windowWidth;
highChart.chartConfig.size.height = windowHeight - 220;
chart.setSize(windowWidth, windowHeight - 220);
}
else {
root.chartExpanded = false;
viewHeader.vh.chartExpanded = false;
highChart.highChartMax = false;
highChart.chartConfig.size.width = vs.savedWidth;
highChart.chartConfig.size.height = vs.savedHeight;
chart.setSize(vs.savedWidth, vs.savedHeight);
}
highChart.restoreChartSize();
}
Ecco la funzione di riflusso:
function restoreChartSize() {
console.log('restoreChartSize');
if (!vs.chartObject.reflowNow) {
vs.chartObject.reflowNow = vs.chartObject.reflowNow = function() {
this.containerHeight = this.options.chart.height || window.window.HighchartsAdapter.adapterRun(this.renderTo, 'height');
this.containerWidth = this.options.chart.width || window.window.HighchartsAdapter.adapterRun(this.renderTo, 'width');
this.setSize(this.containerWidth, this.containerHeight, true);
this.hasUserSize = null;
}
}
vs.chartObject.reflowNow();
}
Questa funzione di riflusso sopra, funziona perfettamente in questo jsFiddle, ma non in la nostra app.
The full Gist file of our HighChartsDirective file.
Dopo aver fatto clic su Ingrandisci, il grafico si espande fino alla dimensione totale della finestra del browser, ma dopo aver trascinato per ridimensionare la finestra del browser, chiamo la funzione restoreChartSize
, che attiva il reflow.
Tuttavia la dimensione del grafico non va per l'auto-size: 100% al 100%, si risale alla dimensione precedente del grafico :(
Dopo la Massimizza funzione:
Ora, dopo il ridimensionamento della finestra del browser:
window.onresize = function(event) {
console.log('window resizing...');
highChart = ScopeFactory.getScope('highChart');
highChart.restoreChartSize();
console.log('highChart.chartConfig = ', highChart.chartConfig);
};
^torna alle dimensioni statiche più piccole, non auto-size: 100%
Grazie, ma veloce q, abbiamo don iniziamo il grafico con 'var chart = new Highcharts.Chart ({' Ecco l'intero Gist della nostra funzione DisplayChart, come potrei creare una variabile per connettermi al grafico? https://gist.github.com/leongaban/2e1e1c5cf2cd76e9b3a6 –
@LeonGaban ha aggiornato la risposta che è possibile utilizzare basato sul tuo succo. Ricorda solo di fare da qualche parte dopo che il grafico è stato inizializzato. – Shaunak
Uffo ancora non riesco a ottenere il grafico associato correttamente, ho aggiunto altro codice sopra, se ho ancora problemi in seguito ... potrebbe dover chiedere all'altro dev di rifattorizzare il suo codice su come si ha la configurazione dei grafici ad alta risoluzione in jsfiddle –