AntV X6使用Vue组件作为渲染节点

1.使用依赖

复制代码
npm install @antv/x6 --save
npm install @antv/x6-vue-shape --save

下述代码使用Vue2技术栈,若使用Vue3则直接参考「AntV」X6 自定义vue节点(vue3) https://www.yuque.com/sxd_panda/antv/vue-node

2.节点组件

要点:

  • 使用inject注入AntV X6父组件中的依赖 getNode
  • 使用this.getNode()可以获取/监听,父组件在节点上配置的数据。
html 复制代码
<!-- branch.vue -->
<template>
  <div>
      {{ name }}
  </div>
</template>
<script>
export default {
  inject: ["getNode"],
  data() {
    return {
      name: '',
    }
  },
  mounted() {
    const node = this.getNode();
    this.name = node.data.name;
    
    // 监听数据
    node.on('change:data',({current})=>{
    	console.log("监听父组件改变的数据",current)
    })
  }
}
</script>

3.父组件(使用节点渲染)

html 复制代码
<template>
  <div>
    <div id="container" />
  </div>
</template>
<script>
// 引入 AntV X6 库
import { Graph } from '@antv/x6'
import { register } from '@antv/x6-vue-shape'

// 引入2中的子组件
import branch from './branch.vue'
// 制作组件节点
register({
  shape: 'branch-node',
  width: 100,
  height: 100,
  component: branch,
})
export default {
	mounted() {
    this.initGraph()
 	 },
	methods: {
		initGraph() {
			const width = window.innerWidth
	     	const height = window.innerHeight
			// 初始化 Graph 对象
	     	const graph = new Graph({
	        container: document.getElementById('container'), // 容器元素
	        width: width, // 设置宽度为屏幕宽度
	        height: height, // 设置高度为屏幕高度
	        interacting: {
	          nodeMovable: false, // 可拖拽节点
	          edgeMovable: false // 可拖拽边
	        },
	        connecting: {
	          connectionPoint: 'anchor'// 连接中心锚点
	        }
	      })
	      // 创建组件节点
	      const branchNode = graph.addNode({
	        x: 950,
	        y: 240,
	        shape: 'branch-node',
	        data: {
	          name: '组件节点名称'
	        },
	      })
		}
  }
}
</script>

Vue3方法参考:「AntV」X6 自定义vue节点(vue3) https://www.yuque.com/sxd_panda/antv/vue-node

参考地址

1.AntV X6结合Vue组件渲染节点,并与节点组件进行双向的数据交互.

2.Ant X6指南踩坑指南.

相关推荐
仿生狮子5 小时前
✂️ Nuxt 最简单的字体裁剪工具:Fontize
javascript·vue.js·nuxt.js
别惊醒渔人10 小时前
Vue3 Diff 优化:最长递增子序列 LIS
前端·javascript·vue.js
用户831348593069814 小时前
Vue+Three.js实现PCB电路板3D交互:元器件点击高亮、部件显隐、模型自动旋转
vue.js·webgl·three.js
GitLqr16 小时前
提升 Web 开发效率:我常用的 10 个 TypeScript 实战技巧
vue.js·react.js·typescript
AI_paid_community20 小时前
机械研发人员如何使用 Claude?
java·vue.js
cdcdhj20 小时前
vue3中的watchEffect()监听,什么时候监听,什么时候清理,什么时候停止
前端·javascript·vue.js
无人生还20 小时前
从 Vue3 到 React · 快速上手系列第 6 篇:状态管理 useState 与 useReducer
前端·vue.js·react.js
林间码客21 小时前
全栈视角下的 Mock 指南:从后端单元测试到前端 Vue 3 联调
前端·vue.js·单元测试
Cobyte1 天前
手写 Rollup 插件实现解析 Vue 文件
前端·javascript·vue.js
meilindehuzi_a1 天前
Vue3组件样式隔离与组件通信实战:从 scoped、props 校验到记事本应用
前端·javascript·vue.js