antv x6 注册vue组件 响应传值

使用antv x6 vue组件创建节点信息-当节点过于复杂可以考虑,避免使用markup\attr过于复杂  

官网 antv -vue组件

示例1 、 使用inject 接收父组件传值

import { Graph } from '@antv/x6'
import { register } from '@antv/x6-vue-shape'
  import TestNode from './test1.vue'

 

渲染节点

 

3s后改变值

 

 

创建画布

const graph = new Graph({
        container: document.getElementById('container'),
        width: 800,
        height: 600,
        grid: true,
        background: {
          color: '#F2F7FA'
        }
      })

 

注册vue组件

     register({
        shape: 'custom-vue-node',
        width: 100,
        height: 50,
        component: TestNode
      })

 

添加节点---使用组件

     graph.addNode({
        id: 'node1',
        shape: 'custom-vue-node',
        x: 240,
        y: 140
      })

      graph.addNode({
        id: 'node2',
        shape: 'custom-vue-node', // 使用 - VUE组件
        x: 340,
        y: 240
      })

 

改变节点值

 const node = graph.getCellById('node1')
      const node2 = graph.getCellById('node2')
      // 节点1
      node.setData({
        text: 'node节点1'
      })
      // 节点2
      node2.setData({
        text: 'node节点2'
      })

      // 过3s 更改节点值是否是响应
      setTimeout(() => {
        node.setData({
          text: 'node节点1-change'
        })
        console.log('change')
      }, 3000)

 

以上是基本创建,

TestNode.vue组件
export default {
  name: 'test2View',
  inject: ['getNode'],
  data() {
    return {
      nodeInfo: {}
    }
  },
  mounted() {
    console.log('getNode', this.getNode())
    // console.log('tnode----', this.tnode)

    const node = this.getNode()
    this.nodeInfo = node?.data
    // 监听 change:data数据变化
    node.on('change:data', ({ current }) => {
      console.log('current', current)
      const { text } = current
      this.nodeInfo = current
    })
  },
  methods: {}
}
 

示例2 、 使用render函数来创建组件、传值、点击组件节点值回传父组件

 

注册函数

render函数 添加监听事件 on, props    

myEvent  绑定事件名称
register({
        shape: 'custom-vue-node',
        width: 100,
        height: 50,
        // component: TestNode
        component: {
          render: (h) =>
            h(TestNode, {
              on: {
                // 监听 TestNode组件触发的事件,获取传递出来的数据
                myEvent: (data) => {
                  this.handleMyEvent(data)
                }
              }
            })
        }
      })

 

handleMyEvent 调用方法
  methods: {
    handleMyEvent(val) {
      console.log('val----', val)
    },
}

 

 

子组件

 

  methods: {
    onMyEvent() {
      // 节点组件中触发事件,传递数据
      this.$emit('myEvent', this.node)
    }
  }

 

 

 

控制台

 

 

 

示例3 、props 传值 ,

 

component: {
          render(h) {
            return h(TestNode, {
              on: {
                // 监听 TestNode组件触发的事件,获取传递出来的数据
                myEvent: (data) => {
                  this.handleMyEvent(data)
                }
              },
              props: { // 给子组件传值 
                nodeMsg: this
              }
            })
          }
        }

 

 

 

 如何获取当前节点值 ???

 

posted on 2024-09-27 16:07  Mc525  阅读(238)  评论(0编辑  收藏  举报

导航