您正在努力解决的问题是在渲染函数中调用更新方法会创建一个无限循环。
渲染调用更新 -> 更新重绘图表 -> 渲染再次调用 -> 渲染调用更新 -> ...
避免这种情况的方法之一是使用一些布尔“标志”来控制更新将被调用一次。
使用console.log的简单演示来测试流程:https ://jsfiddle.net/BlackLabel/acoxmhdw/
let chartForUpdate = true;
Highcharts.chart('container', {
chart: {
events: {
render() {
let chart = this;
console.log('test redraw call 1')
if (chartForUpdate) {
chartForUpdate = false;
chart.series[0].update({
data: [5, 10]
})
console.log('test condition IF call')
}
console.log('test redraw call 2')
chartForUpdate = true
}
}
},
series: [{
data: [43934, 52503, 57177, 69658, 97031, 119931, 137133, 154175]
}]
});
编辑
我犯了一个错误,我深表歉意 - 最大调用堆栈不是因为渲染调用的无限循环,而是来自您尝试粘贴的数据。
更新的数据必须采用 Highcharts 要求的格式 -这是一个系列配置对象,其数据为对象数组或值数组或数组数组- 文档:https ://www.highcharts.com/docs/chart-概念/系列和https://api.highcharts.com/class-reference/Highcharts.Series#update
同时,在您的演示中,数据对象的数组正在传递给更新函数,这会产生错误。
我不确定触发此按钮后要显示哪些值,但您需要为其创建一个新的系列对象。像这样的东西:
https://stackblitz.com/edit/angular-9nkrgd-aykarp?file=src/app/app.component.ts