热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于echarts绘制树图形的注意事项(文字倾斜、数据更新、缓存重绘问题等)

最近项目中使用到echarts的树操作,对其中几点注意事项进行下总结。效果图:1、基础配置options的配置如下:{tooltip:{

最近项目中使用到echarts的树操作,对其中几点注意事项进行下总结。
效果图:

1、基础配置

options的配置如下:

{
          tooltip: {
            trigger: 'item',
            triggerOn: 'mousemove'
          },
          series: [
            {
              type: 'tree',
              data: data,
              orient: 'TB',
              symbolSize: 20,
              label: {
                normal: {
                  position: 'left',
                  verticalAlign: 'middle',
                  align: 'right',
                  fontSize: 12,
                  rotate: 45,
                  formatter (data) {
                    let { name } = data;
                    return name.length > 7
                      ? name.substring(0, 7) + '...'
                      : name;
                  }
                }
              },
              leaves: {
                label: {
                  normal: {
                    position: 'right',
                    verticalAlign: 'middle',
                    align: 'left',
                    rotate: 45
                  }
                }
              },
              itemStyle: {
                normal: {
                  borderColor: '#1890ff'
                }
              },
              expandAndCollapse: true,
              animationDuration: 550,
              animationDurationUpdate: 750
            }
          ]
        }

1.1 文字倾斜

label选项设置rotate属性

label:{
    rotate: 45
}

1.2 竖式显示

设置orient选项,LR表示横向,TB表示纵向

{
    type: 'tree',
    orient:'TB'
}

1.3 省略显示

当字数过多的时候显示...在labelformatter中进行设置

label:{
    normal:{
        formatter (data) {
             formatter (data) {
                    let { name } = data;
                    return name.length > 7  ? name.substring(0, 7) + '...'  :  name;
                  }          
    }
}

2、交互说明

当点击【显示关系】的时候,显示图中的黄色边框节点。

看下关系数据:
节点【罗拉】的【朋友】是【quorra】和【heimayu】

我们需要做的就是抽取关系数据并塞入到原来树的节点中,分析逻辑并显示代码:

2.1 在原来树的节点中找到节点【罗拉】

// 获取接口返回的数据
let relatiOns= res.conceptRelationDTOS;

// 对关系数组进行识别,this.relationTreeList是原来树的数据
relations.forEach((item, index) => {
     this.findRelationNode(item, this.relationTreeList);
});

递归树数据找到节点

/**
     * 在 list 中找到 dataId 并塞入关系relationDTO
     * @param data 关系数据
     * @param list 树数据
     */
    findRelationNode (data, list) {
      for (var i = 0, len = list.length; i  0) {
          this.findRelationNode(data, list[i].children);
        }
      }
    }

2.2 找到节点【罗拉】后,塞入孩子节点(关系)

/**
     * 设置孩子节点
     * @param data 关系数据
     * @param node 塞入的节点
     */
    setRelationNode (data, node) {
      let { conceptRelations } = data;
      if (!conceptRelations.length) {
        return;
      }
      conceptRelations.forEach(item => {
        let { relationName, concepts } = item;       

        node.children.push({
          id: new Date().getTime() * Math.random(),
          name: `关系:${relationName}`,
          children: concepts,
          itemStyle: {
            borderColor: '#faa221' // 对节点颜色设置
          }
        });
      });
    }

这里要注意的是,保证设置的id的唯一性,不然会对树的显示渲染有影响

3、重绘缓存影响

echarts在内部渲染树的时候会合并数据,我们这里需要点击显示关系进行切换,数据也是不停的切换的,由于数据的耦合度较高导致树渲染的过程中出现了问题。这里我的解决方法是:
1、设置setOption的第二个参数true,第二个参数指的就是notMerger

this.treeChart.setOption(options,true)

2、在重新渲染前清除画布,方法是clear()

this.treeChart.clear();

亲测有效。


推荐阅读
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • 先看看ElementUI里关于el-table的template数据结构:<template><el-table:datatableData><e ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • [echarts] 同指标对比柱状图相关的知识介绍及应用示例
    本文由编程笔记小编为大家整理,主要介绍了echarts同指标对比柱状图相关的知识,包括对比课程通过率最高的8个课程和最低的8个课程以及全校的平均通过率。文章提供了一个应用示例,展示了如何使用echarts制作同指标对比柱状图,并对代码进行了详细解释和说明。该示例可以帮助读者更好地理解和应用echarts。 ... [详细]
  • 求数组中字符串的最长公共前缀(Java)
    求数组中字符串的最长公共前缀(牛客网—牛客题霸算法篇—NC55)题目描述给你一个大小为n的字符串数组strs,其中包含n个字符串,编写一个函数来查找字符串数组中的最长公共前缀,返回 ... [详细]
  • 将字符串数字拆分成单个数字_【LeetCode】842. 将数组拆分成斐波那契序列
    【LeetCode】842.SplitArrayintoFibonacciSequence将数组拆分成斐波那契序列(Medium)(JAVA)题目描述:Givenas ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • Mysql调优的顺序及面试问题总结
    文章目录一、调优相关1.第一步:本地explain线上查询遇到的第一个坑:遇到的第二个坑:2.第二步:覆盖索引3.第三步&# ... [详细]
author-avatar
莱斯卡尼娅
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有