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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:29:57