• vue2使用 relation-graph 展示关系图谱


    前言:

    关系图是一种非常形象的展示方式,能直观的展示各个字体之间的关联

    我们自己手写关系图可能会比较麻烦,不过 relation-graph 向 vue2 提供了关系图的组件,安装之后正确引入该组件就可以使用关系图,详情还可以看官网,官网有详细的案例和各个案例的源码

    简单的使用大家可以通过官网的案例 ,因为官网上讲的肯定比我要更明白

    这篇文章主要解决从后端返回 数据渲染结点 解决关系图缩放抽搐 的问题

     后端返回数据渲染结点

    写死的数据结点

    官网里的代码是直接写死了 数据结点 ,这样比较方便,但是当需要拿到后端的数据时,就要发请求取到后端数据了

     官网代码

    官网的结点数据放在这个方法中

    1. methods: {
    2. showSeeksGraph(query) {
    3. // 使用要点:通过节点属性expandHolderPosition: 'right' 和 expanded: false 可以让节点在没有子节点的情况下展示一个"展开"按钮
    4. // 通过onNodeExpand事件监听节点,在被展开的时候有选择的去从后台获取数据,如果已经从后台加载过数据,则让当前图谱根据当前的节点重新布局
    5. var graphJsonData = {
    6. 'rootId': 'a',
    7. 'nodes': [
    8. { 'id': 'a', 'text': 'a', color: 'red' },
    9. { 'id': 'b', 'text': 'b' },
    10. { 'id': 'b1', 'text': 'b1' },
    11. { 'id': 'b1-1', 'text': 'b1-1' },
    12. { 'id': 'b1-2', 'text': 'b1-2' },
    13. { 'id': 'b1-3', 'text': 'b1-3' },
    14. { 'id': 'b1-4', 'text': 'b1-4' },
    15. { 'id': 'b1-5', 'text': 'b1-5' },
    16. { 'id': 'b1-6', 'text': 'b1-6' },
    17. { 'id': 'b2', 'text': 'b2' },
    18. { 'id': 'b2-1', 'text': 'b2-1' },
    19. { 'id': 'b2-2', 'text': 'b2-2' },
    20. { 'id': 'c', 'text': 'c' },
    21. { 'id': 'c1', 'text': 'c1' },
    22. { 'id': 'c2', 'text': 'c2' },
    23. { 'id': 'c3', 'text': 'c3' }],
    24. 'links': [
    25. { 'from': 'a', 'to': 'b' },
    26. { 'from': 'b', 'to': 'b1' },
    27. { 'from': 'b1', 'to': 'b1-1' },
    28. { 'from': 'b1', 'to': 'b1-2' },
    29. { 'from': 'b1', 'to': 'b1-3' },
    30. { 'from': 'b1', 'to': 'b1-4' },
    31. { 'from': 'b1', 'to': 'b1-5' },
    32. { 'from': 'b1', 'to': 'b1-6' },
    33. { 'from': 'b', 'to': 'b2' },
    34. { 'from': 'b2', 'to': 'b2-1' },
    35. { 'from': 'b2', 'to': 'b2-2' },
    36. { 'from': 'a', 'to': 'c' },
    37. { 'from': 'c', 'to': 'c1' },
    38. { 'from': 'c', 'to': 'c2' },
    39. { 'from': 'c', 'to': 'c3' }]
    40. }
    41. console.log(JSON.stringify(graphJsonData))
    42. this.g_loading = false
    43. this.$refs.seeksRelationGraph.setJsonData(graphJsonData, (seeksRGGraph) => {
    44. // 这些写上当图谱初始化完成后需要执行的代码
    45. })
    46. },

     小改进之后

    其实向后端发请求拿到数据 ,就是把结点的数据替换成 请求中的数据

     可以看到就是在之前加了一个发送请求的代码 ,其实这个代码也是有问题的,因为不能说是完全做到动态创建结点,因为要给数据预留结点,你就要先知道要返回多少条数据展示出来 ,其他的部分没有太大改动,还是保留官网代码

    1. setGraphData() {
    2. axios.get('https://jsonplaceholder.typicode.com/users/')
    3. .then(res => {
    4. console.log(res)
    5. var length = res.data.length
    6. var __graph_json_data = {
    7. 'rootId':'Users',
    8. 'nodes': [
    9. { 'id': '0', 'text': 'Users'},
    10. { 'id': '1', 'text': res.data[0].name},
    11. { 'id': '11', 'text': res.data[0].email},
    12. { 'id': '12', 'text': res.data[0].phone},
    13. { 'id': '2', 'text': res.data[1].name},
    14. { 'id': '21', 'text': res.data[1].email},
    15. { 'id': '22', 'text': res.data[1].phone},
    16. { 'id': '3', 'text': res.data[2].name},
    17. { 'id': '31', 'text': res.data[2].email},
    18. { 'id': '32', 'text': res.data[2].phone},
    19. { 'id': '4', 'text': res.data[3].name},
    20. { 'id': '41', 'text': res.data[3].email},
    21. { 'id': '42', 'text': res.data[3].phone},
    22. { 'id': '5', 'text': res.data[4].name},
    23. { 'id': '51', 'text': res.data[4].email},
    24. { 'id': '52', 'text': res.data[4].phone},
    25. { 'id': '6', 'text': res.data[5].name},
    26. { 'id': '61', 'text': res.data[5].email},
    27. { 'id': '62', 'text': res.data[5].phone},
    28. ],
    29. 'links': [
    30. {'from': '0', 'to': '1'},
    31. {'from': '0', 'to': '2'},
    32. {'from': '0','to': '3' },
    33. {'from': '0', 'to': '4'},
    34. {'from': '0', 'to': '5'},
    35. {'from': '0', 'to': '6'},
    36. {'from': '1', 'to': '11'},
    37. {'from': '1', 'to': '12'},
    38. {'from': '2', 'to': '21'},
    39. {'from': '2', 'to': '22'},
    40. {'from': '3', 'to': '31'},
    41. {'from': '3', 'to': '32'},
    42. {'from': '4', 'to': '41'},
    43. {'from': '4', 'to': '42'},
    44. {'from': '5', 'to': '51'},
    45. {'from': '5', 'to': '52'},
    46. {'from': '6', 'to': '61'},
    47. {'from': '6', 'to': '62'},
    48. ]
    49. }
    50. this.$refs.seeksRelationGraph.setJsonData(__graph_json_data, (seeksRGGraph) => {
    51. // 这些写上当图谱初始化完成后需要执行的代码
    52. })
    53. })
    54. this.g_loading = false
    55. },

     解决缩放抽搐问题

    这个问题就是个 bug 了,可以看下图 ,当鼠标拖动或者缩放时,关系图就鬼畜了,一直重复自动刷新,也没有实现移动和缩放 , 它一直卡在一个位置

     解决

    解决问题挺简单的,就是之前 div 的高度 是设置成 100%,改成 vh 后问题就迎刃而解

    1. <!-- 原代码 <div v-loading="g_loading" style="height:100%;"> -->
    2. <div v-loading="g_loading" style="height:150vh">
    3. <SeeksRelationGraph
    4. ref="seeksRelationGraph"
    5. :options="graphOptions"
    6. :on-node-expand="onNodeExpand"
    7. :on-node-click="onNodeClick"
    8. >
    9. </SeeksRelationGraph>
    10. </div>

  • 相关阅读:
    【Python】爬虫基础
    Django使用Token认证(simplejwt库的配置)
    记录一下nginx配置文件grpc负载均衡
    【STM32训练—WiFi模块】第一篇、STM32驱动ESP8266WiFi模块获取网络时间
    基于TensorFlow+CNN+协同过滤算法的智能电影推荐系统——深度学习算法应用(含微信小程序、ipynb工程源码)+MovieLens数据集(五)
    [Java安全]—Mybatis注入
    C++之旅(学习笔记)第8章 概念和泛型编程
    webpack的简单使用
    vue2 mixin的方式 大屏适配(缩放居中的方式)
    idea创建包时无法分层
  • 原文地址:https://blog.csdn.net/qq_52855464/article/details/125553246