vue项目中如何使用有向无环图(dag-diagram)

  • 1、自定义右击事件偶现问题
  • 2、节点删除再添加反复操作几次会出现,删除一个节点多个节点一起消失
  • 3、检测是否成环

关于有向无环图在vue项目中的使用和安装,已经有很多的文章有过介绍了,我在这就不再重复这些东西,本文主要介绍的是在使用dag-diagram(一下简称dag)这个插件时的小技巧或者说是一些经验吧

1、自定义右击事件偶现问题
 <DAGBoard:data-all="DataAll"@updateDAG="updateDAG"@editNodeDetails="editNodeDetails"@doSthPersonal="doSthPersonal"/>

插件中有一个doSthPersonal事件,就是用来自定义右击事件的,可以在这个事件中写你所要自定义的右击事件的代码,
但是有一个前提是你需要在每个节点的rightClickEvent中添加这个自定义事件的eventName和label
下面的代码是dag插件中的源码:

const rightClickEvent = this.DataAll.nodes[i].rightClickEvent || null

因此我们可以在自己的项目的updateDAG事件中这样写

this.DataAll.nodes[i].rightClickEvent = [{label: 'CREATE NODE',eventName: 'creatednode',},{label: 'DELETE NODE INFO',eventName: 'deletenode',},];

如果只是简单的这样写上的话你会发现,自定义事件在你第一次去右击的时候是不会出来的,但是第二次就会有了,这是因为updateDAG方法只有节点在幕布内发生变化时(移动或删除)才会执行,在将节点拖入到幕布中的这一事件中是不会触发的
所以我使用了watch来监听this.DataAll.nodes的长度,来添加自定义事件,因为nodes的长度在节点被拖入幕布的时候就会发生变化

'DataAll.nodes.length': {handler() {for (let i = 0; i < this.DataAll.nodes.length; i += 1) {this.DataAll.nodes[i].rightClickEvent = [{label: 'CREATE NODE',eventName: 'creatednode',},{label: 'DELETE NODE INFO',eventName: 'deletenode',},];}},deep: true,},

这样就可以解决第一次点击节点时,自定义事件不出现的问题

2、节点删除再添加反复操作几次会出现,删除一个节点多个节点一起消失

问题原因:
在dag插件中,每个节点的id都是由this.DataAll.nodes.length + 100组成的,如果你是删除节点的时候是先删除的最后添加的节点,那没问题,但是如果删除的是非最后一个节点,那就会出现新添加的节点id和已存在的节点id重复的问题,所以当你移动新添加的节点或者删除新添加的节点时,会有另一个节点随之消失
解决方法:
所以在给节点id赋值时我们应该添加一种情况
就是当用户执行删除操作后,应该将id的值设置为最后添加的id值+1+100,这样就不会出现有重复id的情况

if (this.DataAll.nodes.length) {id1 = this.DataAll.nodes[len - 1].id + 1 - 100 + 100;} else {id1 = this.DataAll.nodes.length + 100;}this.DataAll.nodes.push({...params.desp,id: id1,in_ports: [0, 1, 2, 3, 4],out_ports: [0, 1, 2, 3, 4],});
3、检测是否成环

这个功能我在看插件源码的时候它是有写这部分校验的,但是不知道为什么我在dag这个项目中数据成环后并没有提示,在我自己的项目中也并未实现改功能
于是我就把插件中的关于检测是否成环这部分代码拿出来,直接写在了我自己的 项目中
其实用的还是插件中的源码

// 检测是否成环this.DataAll.edges.forEach((item) => {let isCircle = false;// 出口 入口idconst { dst_node_id } = item; // eslint-disable-lineconst checkCircle = (dstNodeId, nth) => {if (nth > this.DataAll.nodes.length) {isCircle = true;return false;}this.DataAll.edges.forEach((item) => {if (item.src_node_id === dstNodeId) {console.log('目标节点是',item.src_node_id,'次数为',nth,);checkCircle(item.dst_node_id, ++nth); // eslint-disable-line}});return false;};checkCircle(dst_node_id, 1);if (isCircle) {this.DataAll.edges.pop();// alert('禁止成环');this.$Message.error('禁止成环');}});

我是写在了保存按钮中,我试了dag插件带的那几个方法,并未生效,所以就只能在保存时校验
如果有更好的方法,希望大家不吝指教~~

vue项目中如何使用有向无环图(dag-diagram)相关推荐

  1. Apache Spark中的有向无环图DAG

    Apache Spark中的有向无环图DAG 由DATAFLAIR TEAM ·更新· 2018年11月21日 1.目的 在本Apache Spark教程中,我们将了解Apache Spark中的DA ...

  2. 后端 绘制有向无环图(DAG图)

    因为公司的某个系统比较古老,里面的 job 的管理几乎都是直接通过操作数据库来实现的,对于一般的操作还可以忍受,但是每次想知道 job 之间的依赖关系的时候,就会相当难受,于是便脑袋很抽地一定要写一个 ...

  3. 数据驱动应用(三):异构数据服务(基于有向无环图DAG)

    概述 主要概念 数据服务(Data Service):对异构数据源,基于有向无环图,提供异构数据的查询和推送能力. 指标:用于衡量事物发展程度的单位或方法,它还有个IT上常用的名字,也就是度量.例如: ...

  4. 大数据工作流任务调度--有向无环图(DAG)之拓扑排序

    拓扑排序(Topological Sorting) 回顾基础知识: 1.图的遍历: 图的遍历是指从图中的某一个顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次且仅访问一次.注意树是一种特 ...

  5. C#实现有向无环图(DAG)拓扑排序

    对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在 ...

  6. 有向无环图DAG 拓扑排序 代码解释

    目录: DAG定义 举例描述 实际运用 算法描述 算法实战 算法可视化 定义 在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological ...

  7. `Computer-Algorithm` 有向无环图DAG

    Contents 有向无环图 定义 性质 应用 最小路径点覆盖 最小路径重复点覆盖 路径独立集 至少新添加几条边,使得DAG成为SCC 有向无环图 定义 性质 + let HHH be the set ...

  8. 2021-11-29 vue移动端卖座电影项目(三) vue项目中使用Swiper插件,Film页面设置轮拨图,nowPlaying页面设置样式

    文章目录 1.引入swiper.vue组件 目的 步骤 结果 2.把swiper-slide做成匿名插槽 3.Film.vue中通过axios请求获取后台轮播图片 目的 步骤 因为现在原网站已取消轮拨 ...

  9. Vue项目中使用swiper插件开发3d轮播图

    在开发过程中有3D轮播图的需求,使用vue-awesome-swiper完成 先贴个效果图 安装npm install swiper@5.4.5 vue-awesome-swiper -S 全局引入并 ...

最新文章

  1. SpringOSGINoDM项目的插件说明
  2. mfc将文件内容引入编辑框_南开大学黄津辉教授团队联合加拿大麦克马斯特大学Ravi教授团队发表微型MFC水质传感器实际废水检测适用性的研究...
  3. 什么是xmlschema
  4. java derby连接_JAVA-Derby连接
  5. 全球及中国固态锂电池行业需求量预测及投资规模战略报告2021-2027年
  6. 0.Boot Loader的概念和功能
  7. CF245H Queries for Number of Palindromes
  8. Linux常用命令小结(一)
  9. TensorFlow 学习(十一)—— 正则(regularizer)
  10. 安装PaddleOCR遇到ERROR: Command errored out with exit status 1:command: ‘f:\python3.7\python.exe‘ -u -c
  11. 书籍-Druid实时大数据分析原理与实践
  12. mobi格式电子书_中英文电子书下载网站大搜罗
  13. CRM客户管理系统的功能模块有哪些
  14. 有域名得git是怎么弄得_部署到Github Pages上的博客,自定义域名,和免费域名如何申请...
  15. unbuntu 安装jdk
  16. 高翔orbslam_高翔Slambook第七讲代码解读(特征点提取)
  17. NameError: name ‘d2l‘ is not defined
  18. BigBrother的大数据之旅Day 2 Linux(2)
  19. 数据库原理—关系数据库
  20. 递归求最大素因数(java)

热门文章

  1. java内存马学习与理解
  2. 正则表达式学习的个人小结
  3. 2.自动推导、.PHONY
  4. 乐库网页播放器与动态切换图片新闻
  5. c语言实现路由器原理,无线路由器天线原理图 无线路由器天线接入与工作原理...
  6. UReport2报表图片显示
  7. 我的世界服务器显示最大,我的世界最大的服务器是哪个
  8. wi ndows怎么自动编页,雨林木风正版Ghost wi32位 win7ndows7系统地址制作步骤
  9. http协议的302码
  10. 引用别人的毕业论文参考文献怎么标注