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

ngx-charts水平条形图更新数据后条形厚度异常变细问题

问题排查与解决方案

我帮你看了下代码,核心问题出在每次调用getStats()时没有清空原有数据,导致数据数组不断累加,图表的Y轴类别越来越多,每个条形的宽度就被挤压变细了。

具体修改步骤:

  1. 先清空数据数组:在getStats()方法的最开头,先把this.data重置为空数组,避免旧数据残留:
getStats() {
  // 关键:先清空原有数据
  this.data = [];
  const startTime = this.datePipe.transform(this.statsSearchFrom.controls['startTime'].value, 'ddMMyyyy');
  const endTime = this.datePipe.transform(this.statsSearchFrom.controls['endTime'].value, 'ddMMyyyy');
  
  this.adminService.getAgentStats(this.agents, startTime, endTime).subscribe(response => {
    this.agents = response;
    // 用map简化循环,代码更清爽
    this.data = response.map(agent => ({
      name: agent.username,
      value: agent.nbOfClosedEmails
    }));
    
    // 如果变更检测没自动触发,手动通知(可选)
    // this.changeDetection.markForCheck();
  }, error => {
    this.toastr.error('Error while getting the statistics.')
  });
}
  1. 替换for循环为map(可选优化):用数组的map方法直接生成新的数据数组,既避免了手动push的繁琐,也能让Angular的变更检测更高效识别数据变化。

问题根源解释:

首次加载时,getAllAgents()调用getStats(),此时this.data是空数组,生成的新数据刚好匹配图表需求。但第二次点击按钮调用getStats()时,旧的数据还留在this.data里,新的agent数据又被追加进去,导致Y轴的代理数量翻倍(甚至更多),每个条形的宽度自然就被压缩变细了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:48:58