ngx-charts水平条形图更新数据后条形厚度异常变细问题
问题排查与解决方案
我帮你看了下代码,核心问题出在每次调用getStats()时没有清空原有数据,导致数据数组不断累加,图表的Y轴类别越来越多,每个条形的宽度就被挤压变细了。
具体修改步骤:
- 先清空数据数组:在
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.') }); }
- 替换for循环为map(可选优化):用数组的
map方法直接生成新的数据数组,既避免了手动push的繁琐,也能让Angular的变更检测更高效识别数据变化。
问题根源解释:
首次加载时,getAllAgents()调用getStats(),此时this.data是空数组,生成的新数据刚好匹配图表需求。但第二次点击按钮调用getStats()时,旧的数据还留在this.data里,新的agent数据又被追加进去,导致Y轴的代理数量翻倍(甚至更多),每个条形的宽度自然就被压缩变细了。
内容的提问来源于stack exchange,提问作者mighty_mike
相关产品推荐
相关产品推荐

