echarts饼图点击图例事件第一次没反应,第二次才执行(angular版本)【问题笔记】

目录

1.需求描述:

2.实现方式: 

3.angular 具体实现:

4.问题描述:

5.解决方案:


1.需求描述:

点击饼图的图标,饼图中间的总数随着选中的图标动态变化。

2.实现方式: 

// 切换图例选中状态后的事件
chart.on('legendselectchanged', function (obj) {}

官方文档:Documentation - Apache ECharts

3.angular 具体实现:

ChartsChange() {
    let thisOption = this.option;
    let thisEchartsInstance = this.echartsIntance;

    // 解决重复触发
    thisEchartsInstance.off("legendselectchanged");

    // 切换图例选中状态后的事件
    thisEchartsInstance.on("legendselectchanged", function (params) {
      let total = 0;
      const legendSelectedArr = {};
      thisOption?.data?.forEach(element => {
        // 获取图例的选中状态,并存储在 legendSelectedArr 对象中,用于后面 计算总数判断 和 updateOption
        legendSelectedArr[element.name] = params.selected[element.name];
        // 计算被选择的总数
        if (params.selected[element.name]) {
          total += element.value;
        }
      });
      // 赋值总数
      thisOption.graphic.elements[0].style.text = total;
      // 赋值状态,否则更新option后,图例的选中状态会失效
      thisOption.legend.selected = legendSelectedArr;
      thisEchartsInstance.setOption(thisOption, true);
    });
  }
  
  <!-- 饼图 -->
<div
  echarts
  [options]="option"
  (chartInit)="onChartInitPie($event)"
  (click)="ChartsChange()"
></div>

4.问题描述:

饼图点击图例事件第一次没反应,第二次才执行

原因分析:

我觉得是第一次点击时,点击方法没有被图表实例对象注册

5.解决方案:

图表初始化时,调用一下点击事件的方法

onChartInitPie(ec: any) {
  this.echartsIntance = ec;
  this.updateEchartsIntanceOption();

  // chart 初始化的时候也初始化方法,否则方法第一次触发失效
  this.ChartsChange();
}

 参考:vue使用ECharts点击事件不能执行的坑(点击第一次没反应第二次才执行)_拷贝忍者 卡卡西的博客-CSDN博客

ECharts 是一个使用 JavaScript 实现的开源可视化库,它可以在网页中创建各种图表。在 ECharts 中,饼图是一种常见的数据可视化形式,用于展示不同部分占总体的比例。有时候用户希望点击饼图图例时,不改变饼图的显示状态,而是执行其他一些操作,比如触发事件或者弹出提示等。 要实现点击图例不让饼图发生变化的效果,你可以通过设置 `series` 的 `selectedMode` 属性来控制。将该属性设置为 `'none'`,意味着禁用图例的选择功能,点击图例时,饼图不会显示对应部分的高亮效果。然后,你可以监听图例点击事件,通过回调函数来定义点击后要执行的操作。 下面是一个简单的示例代码,展示如何设置 ECharts 饼图以及如何监听图例点击事件: ```javascript // 基于准备好的dom,初始化echarts实例 var myChart = echarts.init(document.getElementById('main')); // 指定图表的配置项和数据 var option = { series: [ { name: '访问来源', type: 'pie', selectedMode: 'none', // 禁用图例选择 radius: '55%', label: { show: false, position: 'center' }, emphasis: { label: { show: true, fontSize: '40', fontWeight: 'bold' } }, labelLine: { show: false }, data: [ {value: 335, name: '直接访问'}, {value: 310, name: '邮件营销'}, {value: 234, name: '联盟广告'}, {value: 135, name: '视频广告'}, {value: 1548, name: '搜索引擎'} ] } ], // 在这里设置图例点击事件 legend: { data: [ {name: '直接访问'}, {name: '邮件营销'}, {name: '联盟广告'}, {name: '视频广告'}, {name: '搜索引擎'} ], onclick: function (params) { // 这里可以编写点击图例后想要执行的逻辑 console.log('点击图例:', params.name); } } }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); ``` 在上述代码中,通过设置 `series` 中 `selectedMode` 为 `'none'`,可以禁用图例项的选中状态变化。而通过 `legend` 的 `onclick` 事件,可以在点击图例执行一些特定的操作,比如输出点击图例项名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值