当前位置: 首页 > news >正文

Vue中实现在线画流程图实现

概述

最近在调研一些在线文档的实现,包括文档编辑器、在线思维导图、在线流程图等,前面的文章基于语雀编辑器的在线文档编辑与查看实现了文档编辑器。在本文,分享在Vue框架下基于metaeditor-mxgraph实现在线流程图。

实现效果

image.png

实现

1. 添加依赖

{"metaeditor-mxgraph": "^2.0.7"
}

2. 编辑器简介

metaeditor-mxgraph,图元编辑器,支持独立的流程图编辑器,以及 DrawIO 嵌入方案。文档地址为:https://npm.io/package/metaeditor-mxgraph。

3. 编辑器实现

<template><div class="flow-chart" ref="flowChart"></div>
</template><script>
import 'metaeditor-mxgraph/assets/index.scss'
import { MetaEditor } from 'metaeditor-mxgraph'
const { MetaGraphEditor, getLanguage, stringToXml, xmlToString } = MetaEditorexport default {props: {chartData: {type: Object,default: () => null,},},mounted() {this.$nextTick(() => {this.init()})},watch: {chartData() {this.init()},},unmounted() {this.destroy()},methods: {destroy() {if (window.metaGraphEditor) window.metaGraphEditor.destroy()window.metaGraphEditor = null},init() {this.destroy()const xml = stringToXml(this.chartData || '<mxGraphModel></mxGraphModel>')const dom = this.$refs.flowChartconst metaGraphEditor = new MetaGraphEditor({container: dom,})const lan = getLanguage('zh')metaGraphEditor.init(lan, xml)window.metaGraphEditor = metaGraphEditor},},
}
</script><style scoped lang="scss">
.flow-chart {width: 100%;height: 100%;
}
</style>

需要注意的是,编辑器默认是绝对定位的,想要跟随设定dom大小,需要设置其样式为:

 .metagraph-container {position: relative;width: 100%;height: 100%;user-select: none;
}

设置完样式后,菜单的位置会出错,这个还没修复,使用时请注意。

4. 文档预览

<template><div class="flow-chart" ref="flowChart"></div>
</template><script>
import 'metaeditor-mxgraph/assets/index.scss'
import { MetaEditor } from 'metaeditor-mxgraph'
const { MetaGraphViewer, stringToXml} = MetaEditorexport default {props: {chartData: {type: Object,default: () => null,},},mounted() {this.$nextTick(() => {this.init()})},watch: {chartData() {this.init()},},methods: {init() {const xml = stringToXml(this.chartData || '<mxGraphModel></mxGraphModel>')const dom = this.$refs.flowChartconst metaGraphEditor = new MetaGraphViewer({xml: xml,})const { offsetWidth, offsetHeight } = domconst svg = metaGraphEditor.renderSVGDom(null, 1, 1, {width: offsetWidth,height: offsetHeight,})dom.appendChild(svg)},},
}
</script><style scoped lang="scss">
.flow-chart {width: 100%;height: 100%;
}
</style>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 解决后端限制导致前端配置跨域仍请求失败报504的问题
  • 如何在 Ubuntu 16.04 上安装和配置 Zabbix 以安全监控远程服务器
  • 应急响应-战后溯源反制社会工程学
  • C++ 实现图书馆资料管理系统
  • lvs集群、NAT模式和DR模式、keepalive
  • wifi中的PSR技术
  • Java Stream API详解:高效处理集合数据的利器
  • 休息时间c++
  • Java对象创建究竟是在栈上还是堆上??
  • FPGA上板项目(一)——点灯熟悉完整开发流程、ILA在线调试
  • 【C语言】《回调函数》详细解析
  • 探索最佳海外代理服务商!你知道哪些?
  • Java面试题系列 - 第10天
  • Python编程实例-Python的隐藏特性
  • 数据建设实践之大数据平台(三)安装hadoop
  • 【EOS】Cleos基础
  • 11111111
  • egg(89)--egg之redis的发布和订阅
  • Javascript编码规范
  • JavaScript实现分页效果
  • Java-详解HashMap
  • laravel 用artisan创建自己的模板
  • LintCode 31. partitionArray 数组划分
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Next.js之基础概念(二)
  • node.js
  • Redis中的lru算法实现
  • Vue 重置组件到初始状态
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 力扣(LeetCode)21
  • 前端路由实现-history
  • 微信小程序开发问题汇总
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • puppet连载22:define用法
  • ​iOS实时查看App运行日志
  • !!Dom4j 学习笔记
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (7) cmake 编译C++程序(二)
  • (C#)一个最简单的链表类
  • (function(){})()的分步解析
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (五)c52学习之旅-静态数码管
  • (循环依赖问题)学习spring的第九天