Leo*_*ban 5 javascript charts highcharts angularjs highcharts-ng
在我们的Angular应用程序中,我们使用highcarts-ng来实现HighCharts.
这是Chart Maximize和Minimize函数,它的工作原理如下:
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();
}
Run Code Online (Sandbox Code Playgroud)
这是回流功能:
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();
}
Run Code Online (Sandbox Code Playgroud)
上面的这个回流函数在这个jsFiddle中完美运行,但在我们的应用程序中没有.
我们的HighChartsDirective文件的完整Gist文件.
单击最大化后,图表将扩展到浏览器窗口的完整大小,但在拖动以调整浏览器窗口大小后,我调用该restoreChartSize函数,这将激活重排.
但是,图表的大小不会自动调整为100%100%,它会回到之前的图表大小:(
最大化功能后:
现在调整浏览器窗口大小后:
window.onresize = function(event) {
console.log('window resizing...');
highChart = ScopeFactory.getScope('highChart');
highChart.restoreChartSize();
console.log('highChart.chartConfig = ', highChart.chartConfig);
};
Run Code Online (Sandbox Code Playgroud)
^回到较小的静态尺寸,而不是自动尺寸100%
您可以通过向图表添加新方法来手动触发重排,如下所示:
chart.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, false);
this.hasUserSize = null;
}
Run Code Online (Sandbox Code Playgroud)
然后,无论何时你想要使用setSize()手动调整大小,只需调用即可 chart.reflow()
这是一个有效的例子:jsFiddle
参考来自:github-issue
ng-highcharts用户的更新
为了在使用ng-highcharts库时执行此操作,您只需在具有highcharts-ng依赖关系的控制器中拉出图表对象并添加该reflowNow函数,如下所示:
var chart = this.chartConfig.getHighcharts();
chart.reflowreflowNow = function (){ ... }
Run Code Online (Sandbox Code Playgroud)
这也是拉出图由NG-highcharts的作者所指出做自定义作业的推荐方式在这里,这小提琴.