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

amCharts 4更新柱状图data属性时触发Uncaught ReferenceError错误

问题原因

chart变量定义在am4core.ready()的匿名回调函数内部,属于函数作用域内的局部变量,只有回调内部的代码可以访问。而updateChart()函数定义在全局作用域,没有权限读取这个局部变量,因此抛出未定义的报错。

修复方案

你可以任选以下任意一种方案解决问题:

  • 方案1:将chart变量提升到全局作用域定义
// 在全局作用域提前声明变量
var chart;

am4core.ready(function() {
  // 其他初始化逻辑不变
  // 去掉var关键字,直接给全局chart变量赋值
  chart = am4core.create("chartdiv", am4charts.XYChart);
  // 剩余初始化逻辑不变
}, false);

// 原updateChart函数不需要修改,可直接访问全局的chart变量
  • 方案2:将更新函数移到回调内部定义
am4core.ready(function() {
  // 其他初始化逻辑不变
  var chart = am4core.create("chartdiv", am4charts.XYChart);
  // 剩余初始化逻辑不变

  // 把updateChart移到回调内部定义,和chart属于同一作用域可直接访问
  function updateChart() {
    chart.data = [/* 你的新数据 */];
  }

  // 如果updateChart需要绑定DOM事件,也在回调内部完成绑定即可
  document.getElementById('updateBtn').addEventListener('click', updateChart);
}, false);
  • 方案3:将实例挂载到DOM元素避免污染全局变量
am4core.ready(function() {
  // 其他初始化逻辑不变
  var chart = am4core.create("chartdiv", am4charts.XYChart);
  // 把实例挂载到图表容器DOM的自定义属性上
  document.getElementById('chartdiv').chartInstance = chart;
  // 剩余初始化逻辑不变
}, false);

function updateChart() {
  // 先从DOM元素读取实例
  const chart = document.getElementById('chartdiv').chartInstance;
  if (!chart) return; // 兼容初始化未完成的场景,避免报错
  chart.data = [/* 你的新数据 */];
}
注意事项

调用updateChart的时机需要晚于am4core.ready回调执行完成,否则图表实例还未初始化完成,依然会出现报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:48:02