Angular Syncfusion SplineRange图表调用栈溢出问题咨询
解决Syncfusion SplineRange图表更新dataSource时的调用栈溢出问题
问题根源
直接把后端返回的result.data赋值给this.data时,要么是数据里存在循环引用,要么是Angular的变更检测触发了无限循环更新,才会出现调用栈溢出错误。另外如果data是组件内的响应式对象,直接替换引用也可能引发不必要的循环检测。
可行的解决办法
浅拷贝数据后再赋值:
给数据创建新的引用,避免复用后端返回的对象,打破可能的循环:// 若data是数组类型 this.data = [...result.data]; // 若data是对象类型 this.data = {...result.data};使用Syncfusion的refresh方法手动刷新图表:
更新数据后手动触发图表刷新,让组件正确处理变更:// 先更新数据(建议配合浅拷贝) this.data = [...result.data]; // 获取图表实例并执行刷新 const chart = document.querySelector('.e-chart') as any; chart.refresh();清理数据中的循环引用:
检查后端返回的数据是否存在循环引用(比如对象属性引用自身或父级对象),若有则先处理再赋值:// 简易处理循环引用(仅适用于纯数据结构,会丢失函数、Symbol等非JSON兼容类型) this.data = JSON.parse(JSON.stringify(result.data));手动控制Angular的变更检测:
如果是变更检测导致的循环,注入ChangeDetectorRef,更新数据后手动标记变更:import { ChangeDetectorRef } from '@angular/core'; constructor(private cdr: ChangeDetectorRef) {} // 更新数据时执行 this.data = [...result.data]; this.cdr.detectChanges();
内容的提问来源于stack exchange,提问作者gali lohith
相关产品推荐
相关产品推荐

