基于Vue2.x和G6实现拓扑

1,540 阅读2分钟

对比了目前的一些topo插件,最终还是选择了antv-g6,两个原因:

1.G6上手难度适中,灵活性很高,各种节点动画的自定义很好,而且和整个阿里开源生态是打通的,包括阿里图标库

2.阿里这些年开源的很多东西品质都不错,维护的也很好(PS:自从马云金沙江论坛演讲后,现在网上到处都在网爆阿里,说互联网没什么技术含量,这种论调让人心痛)

G6的使用 先上个图

image.png

这个图包含一下几个功能:

1.点击node,再点到另一个node,可以进行连线
    
这个功能是在modes里面通过create-edge设置的。G6有预制的模式,只需要在modes里面配置即可,而且模式支持扩展,例如
    
如果使用默认的模式这么写:
` {
      type: 'drag-canvas'
  },`
  
如果要加一些自己的限制,例如相同的起点和终点不支持连线,可以在预制的回调事件加以下限制    ` {
      type: 'create-edge',
      shouldBegin: (e) => {
        this.startPoint = e.target.cfg.parent.cfg.id
        return true
      },
      shouldEnd: (e) => {
        // 禁止重复连线
        return e.target.cfg.parent.cfg.id !== this.startPoint
      }
  } `
2.自定义节点使用阿里图标库
  首先引入阿里图标库的字体样式import '@/assets/icons/iconfont.css'
  然后使用G6.registerNode('iconfontAAA',draw(){
      group.addShape('text', {
        attrs: {
          x: 0,
          y: 0,
          fontFamily: 'iconfont', // 对应css里面的font-family: "iconfont";
          textAlign: 'center',
          textBaseline: 'middle',
          text: cfg.text,
          fontSize: 60,
          fill: cfg.fill
        },
        name: 'icon-svg'
      })
  })自定义节点
  其中iconfontAAA就是自定义节点的类型,在创建节点的数据中设置type:iconfontAAA即可。有一点需要注意其中字体的text是阿里图标库编码前面加\u转义`text = '\ue619'`
  3.还有包括右键这些事件`graph.on('edge:contextmenu'`,之类的就不在赘述了。
  
  最后附上代码地址(欢迎拍砖,多拍拍长得快)

  https://github.com/luokerenGIT/vue-g6