解决重复使用eChart时,遇到eChart不显示的问题

        最近在试着写前端代码,由于没有angular经验,导致在写的过程中给自己挖了不少坑。特此记录一下,以备后用。

        现有一个页面,2个tab。tab1显示主机当前的cpu,内存等的使用情况;tab2显示主机的历史cpu,内存等的使用情况。

        tab1的伪代码如下:

<div>
  <ul>
	<li>
        <tab1>current</tab1>
    </li>
	<li>
        <tab2>history</tab2>
    </li>
  </ul>
</div>

tab1: 

<div>
  <my-chart [key]="'cpu'" [data]="data['cpu']"></my-chart>
  <my-chart [key]="'mem'" [data]="data['mem']"></my-chart>
  <my-chart [key]="'disk'" [data]="data['disk']"></my-chart>
</div>

tab2:

<div>
  <my-chart [key]="'cpu'" [data]="history['cpu']"></my-chart>
  <my-chart [key]="'mem'" [data]="history['mem']"></my-chart>
  <my-chart [key]="'disk'" [data]="history['disk']"></my-chart>
</div>

my-chart的html源码:

<div id="{{'chart_' + key}}"></div>

 my-chart的ts源码:

ngOnInit() {
	const chartElement = document.getElementById('chart_' + this.key);
	if (chartElement) {
	  this.charts = echarts.init(chartElement);
	  setTimeout(() => {
		setData(); // 添加数据
	  }, 100);
	} else {
	  console.error('element not found with ID:', 'chart_' + this.key);
	}
}  

大致代码如上,当在tab1和tab2之间来回切换时会发现,总是有chart不会显示的问题。

        一番折腾才发现,原来是传入key的时候重复,导致上述问题发生。也就是这一句:

<my-chart [key]="'xxx'" [data]="history['xxx']"></my-chart>

当两个tab中同时存在key为xxx的组件时,就会导致另一个界面的该组件无法显示。

问题找到了,那改起来也很简单,我这里提供两种方法:

        1. 两个tab页使用不同的key,比如tab1设置为:tab1_xxx,tab2设置为:tab2_xxx。这样就可以避免key值重复了。

        2. 可以保持key值相同,每次切换tab时,将之前的元素删掉,代码如下:

ngOnDestroy() {
	if (this.charts) {
	  this.charts.dispose();
	  this.charts = null;
	  
	  const chartElement = document.getElementById('chart_' + this.key);
	  if (chartElement) {
		console.error('chart element exist:', chartElement);
		chartElement.remove(); // 手动移除 DOM 元素
		console.log('chart element removed ');
	  }
	}
}

对比起来,第一种简单,第二种改动较大。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值