我可以在一个非常简单的 Angular-Hicharts 应用程序中重现该问题。当我从服务器检索数据,然后离开带有 Highcharts 图表的页面时,我收到此错误:
无法在 HighchartsChartComponent.ngOnDestroy (highcharts-angular.js:44) 的 a.destroy (highcharts.js:394) 处读取未定义的属性“forExport”
不足为奇的HighchartsChartComponent.ngOnDestroy
是
ngOnDestroy() {
if (this.chart) { // #56
this.chart.destroy();
this.chart = null;
}
}
这是最小的示例:
export class WeatherForecastComponent implements OnInit {
highcharts: typeof Highcharts = Highcharts;
chartOptions: Highcharts.Options = { ... };
constructor(private http: HttpClient) { }
ngOnInit(): void {
this.http.get<any[]>(`http://localhost:57432/WeatherForecast`, {
headers: new HttpHeaders({
"Content-Type": "application/json"
})})
.subscribe(result => {
let categories: string[] = [];
let dataSeries: number[] = [];
for (let i = 0; i < result.length; i++) {
categories.push(result[i]['location']);
dataSeries.push(result[i]['temperatureC']);
}
this.chartOptions.xAxis = {
categories: categories
};
this.chartOptions.series = [{
type: "column",
name: "Cities",
data: dataSeries
}];
this.highcharts.chart('container', this.chartOptions);
}, error => {
console.log(error);
});
}
}
我在 Stack Overflow 和 Github 上都看到了许多类似的问题。我知道根本原因是它正在尝试删除已删除的图表。但他们都在删除(或试图删除)应用程序代码中的图表。
我试图删除 中的图表ngOnDestroy()
,或取消订阅 - 但没有区别。
这是repo,包括服务器端代码。
请注意,当它是“硬编码”图表时,问题不会发生。
角度:12.2;Highchars 9.2.2;Highcharts-Angular:2.10.0