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

Angular13中Highcharts无数据提示语国际化切换失效问题

解决Angular 13中Highcharts无数据提示的语言切换问题

核心问题

Highcharts.setOptions()仅对后续创建的图表生效,已初始化完成的图表不会自动读取新的全局配置,直接调用redraw()也无法触发无数据文本的更新。

解决方案

1. 保存图表实例

在组件中存储初始化后的Highcharts图表实例,方便后续直接操作:

// 组件类内定义变量
private chartInstance: Highcharts.Chart;

// 初始化图表时保存实例
initChart() {
  this.chartInstance = Highcharts.chart('chart-container', {
    // 你的基础图表配置
    noData: {
      style: {
        fontWeight: 'bold',
        fontSize: '12px',
        color: '#666'
      }
    }
  });
}

2. 语言切换时直接更新实例配置

在语言变更订阅中,同时更新全局配置和已存在的图表实例:

this.translate.onLangChange.subscribe((event: LangChangeEvent) => {
  // 更新全局配置,供后续创建的图表使用
  Highcharts.setOptions({
    lang: {
      noData: this.translate.instant('no.data.found')
    }
  });

  // 直接修改已存在的图表实例
  if (this.chartInstance) {
    // 更新配置中的文本
    this.chartInstance.options.lang.noData = this.translate.instant('no.data.found');
    // 直接修改页面上的无数据标签文本
    if (this.chartInstance.noDataLabel) {
      this.chartInstance.noDataLabel.attr({
        text: this.translate.instant('no.data.found')
      });
    }
    // 重新渲染图表
    this.chartInstance.redraw();
  }
});

3. 确认翻译键映射正确

确保i18n配置文件中对应语言的翻译值正确:

// de.json
{
  "no.data.found": "Es wurden keine Daten gefunden"
}

// en.json
{
  "no.data.found": "No data found"
}

补充:使用angular-highcharts封装库的情况

如果用的是官方封装的angular-highcharts,可通过组件实例获取图表对象:

// 模板中定义组件引用
// <highcharts-chart [options]="chartOptions" #chartRef></highcharts-chart>

@ViewChild('chartRef') chartComponent: HighchartsChartComponent;

// 语言切换时更新
this.chartComponent.chart.options.lang.noData = this.translate.instant('no.data.found');
this.chartComponent.chart.noDataLabel.attr({ text: this.translate.instant('no.data.found') });
this.chartComponent.chart.redraw();

内容的提问来源于stack exchange,提问作者Burçin Ezgi Erdal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:40:24