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

Chart.js调用push更新图表时出现Cannot read property 'apply' of undefined错误

解决Chart.js更新时的"Cannot read property 'apply' of undefined"错误

我看了你的代码和报错信息,这个问题主要出在图表初始化的数据格式错误,还有一些小的代码细节问题,下面一步步帮你修复:

1. 修复图表初始化的数据集数据类型

你在createChart方法里初始化数据集的时候,把data设成了{}(空对象),但Chart.js的折线图要求数据集的data必须是数组类型。这个错误会导致Chart.js内部处理数据时调用apply方法找不到对应对象,直接抛出你看到的错误。

修改createChart里的datasets部分:

datasets: [{ data: [] }] // 把{}改成[]

2. 修复formatData函数的返回值问题

当输入的errorOccurences不是数组时,你的函数直接return,这会返回undefined。后续updateChart里用这个undefined去遍历,会引发额外的问题。应该改成返回空数组:

if (!Array.isArray(errorOccurences)) {
 console.warn('ErrorOccurences is not an array');
 return []; // 这里返回空数组而不是直接return
}

3. 优化图表更新逻辑(可选但推荐)

你现在是用push逐个添加数据,这会导致每次更新都往现有数据里追加新数据。如果你的需求是替换为最新的完整数据,直接赋值会更高效且避免数据重复:

private updateChart(): void {
 if (!this._chart) {
 return;
 }
 const data = ErrorComponent.formatData((this.reportedError as StandardReportedError).standardErrorOccurences);
 // 替换成直接赋值,而不是逐个push
 this._chart.data.datasets[0].data = data;
 this._chart.update();
 this.isLoadingOccurrences = false;
}

另外,你可以检查下roundDateBy3Hours方法的返回值,确保它返回的是时间戳数字(因为你后续用parseInt(q)处理),避免出现非数字的key导致数据解析错误。

按照上面的修改,应该就能解决你遇到的错误,正常更新图表了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:47:29