报表页右侧折线图整块是白的,控制台没有报错,量一下容器宽高是 0×320,把浏览器窗口拉一下就正常显示。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

const el = document.getElementById('chart');
if (!el.offsetWidth) return;
const chart = echarts.init(el);
new ResizeObserver(() => chart.resize()).observe(el);

图表在隐藏的标签页里初始化,父容器是 display:none,宽高都取到 0,canvas 按 0 建出来就一直是空的。容器重新可见后实例不会自己重算尺寸。这一点先确认清楚,后面就不用反复试。

「ECharts 容器宽度为 0」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

具体做法是,把初始化挪到容器可见之后 切换标签页时再执行一次;初始化前先读 offsetWidth 为 0 就直接返回 下一帧重试;已经存在的实例在容器尺寸变化时手动调 resize。

改完照着核一遍,切到统计标签页后折线立即出现,量到的容器宽度不再为 0。

作者 9823189