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
相关产品推荐
相关产品推荐

