antvis / g6-editor

534 stars 171 forks source link

锚点输入输出项的配置失效 #37

Closed LittleBreak closed 6 years ago

LittleBreak commented 6 years ago

环境

    "@antv/g2": "^3.2.6",
    "@antv/g6": "^2.1.0",
    "@antv/g6-editor": "^1.0.8",

用法

Flow.registerNode(
      'test',
      {
        anchor: [
          [
            1,
            0.5,
            {
              type: 'input', // 这里只允许输入
            },
          ],
 [
            1,
            1,
            {
              type: 'output', // 只允许输出
            },
          ],
        ],
      },
      'flow-node',
    );

关于锚点的这种写法是参考的官网上的例子,但是不起作用,仍然可以随意连接。 这种写法有问题吗

LittleBreak commented 6 years ago
    page.on('hoveranchor:beforeaddedge', (ev) => {
      if (ev.anchor.type === 'input') {
        ev.cancel = true;
      }
    });
    page.on('dragedge:beforeshowanchor', (ev) => {
      // 只允许目标锚点是输入,源锚点是输出,才能连接
      if (!(ev.targetAnchor.type === 'input' && ev.sourceAnchor.type === 'output')) {
        ev.cancel = true;
      }
      // 如果拖动的是目标方向,则取消显示目标节点中已被连过的锚点
      if (ev.dragEndPointType === 'target' && page.anchorHasBeenLinked(ev.target, ev.targetAnchor)) {
        ev.cancel = true;
      }
      // 如果拖动的是源方向,则取消显示源节点中已被连过的锚点
      if (ev.dragEndPointType === 'source' && page.anchorHasBeenLinked(ev.source, ev.sourceAnchor)) {
        ev.cancel = true;
      }
    });

解决了,原来是通过事件来自己实现控制字