You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中调用eCharts的resize方法失效报错如何解决?

问题原因

你错误地将ECharts配置项对象当做图表实例调用了resize方法。ECharts的resize()是echarts.init()返回的实例对象专属方法,你当前定义的this.chartOptions仅存储图表的配置参数,不存在resize方法,因此触发报错。

修复步骤
  • 单独声明变量存储ECharts实例,初始化图表时将init返回的实例赋值给该变量
  • 调用setOption方法将你的配置项挂载到实例上
  • 窗口resize事件中调用实例的resize方法,可补充非空判断避免实例未初始化时报错

正确的图表初始化代码示例:

// 声明变量存储ECharts实例
private chartInstance: any;

// 图表初始化逻辑
initChart() {
  const chartDom = document.getElementById('你的图表容器ID');
  this.chartInstance = echarts.init(chartDom);
  // 你的原有配置项
  this.chartOptions = {
    type:'radar',
    indicators: [],
    series: []
    // 其余配置省略
  };
  this.chartInstance.setOption(this.chartOptions);
}

resize事件的正确写法:

@HostListener('window:resize', ['$event'])
onResize(event) {
  // 非空判断避免实例未初始化时调用报错
  this.chartInstance?.resize();
}
可选优化

可以给resize逻辑增加防抖,避免窗口频繁调整时多次触发重绘造成性能损耗:

private resizeTimer: NodeJS.Timeout | null = null;

@HostListener('window:resize', ['$event'])
onResize(event) {
  if (this.resizeTimer) clearTimeout(this.resizeTimer);
  this.resizeTimer = setTimeout(() => {
    this.chartInstance?.resize();
  }, 300);
}

内容的提问来源于stack exchange,提问作者john

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:57:03