配置指南
事件
使用 GraphEventMap 和 graph.on、graph.off、graph.once 监听公开事件
通过 graph.on()、graph.off()、graph.once() 监听事件。已知事件由公开 GraphEventMap 自动推导 payload:
graph.on('node:click', ({ nodeId, data, nativeEvent }) => {
console.log(nodeId, data, nativeEvent.clientX, nativeEvent.clientY);
});
graph.on('canvas:wheel', ({ nativeEvent }) => {
console.log(nativeEvent.deltaY); // WheelEvent
});
graph.once('destroy', () => {
console.log('destroyed'); // 零参数
});元素事件中的 nativeEvent 是原始 MouseEvent 或 WheelEvent。兼容字段 event 仍然存在,但已弃用,新代码应使用 nativeEvent。
元素事件
元素事件由交互分发层统一命中并发出,不需要额外启用 click behavior。
- Node:
node:pointerover、node:pointerenter、node:pointermove、node:pointerleave、node:pointerdown、node:click、node:dblclick、node:contextmenu、node:wheel。 - Edge:
edge:pointerover、edge:pointerenter、edge:pointermove、edge:pointerleave、edge:pointerdown、edge:click、edge:dblclick、edge:contextmenu、edge:wheel。 - Combo:
combo:pointerdown、combo:click、combo:dblclick、combo:contextmenu。 - Canvas:
canvas:pointermove、canvas:pointerdown、canvas:pointerup、canvas:click、canvas:dblclick、canvas:contextmenu、canvas:wheel。
精确事件类型分别为 NodeGraphEvent、EdgeGraphEvent、ComboGraphEvent 和 CanvasGraphEvent。节点事件的 nodeId、边事件的 edgeId / edgeIndex / source / target、Combo 事件的 comboId 都是对应 handler 中的必填字段。
选择与拖拽事件
这些事件由内置 Behavior 发出:
- 选择:
node:selectchange、edge:selectchange、selection:clear。 - 节点拖拽:
node:dragstart、node:drag、node:dragend。 - Combo 拖拽:
combo:dragstart、combo:drag、combo:dragend。 - 边端点拖拽:
edge:dragstart、edge:drag、edge:dragend。 - 框选:
brush:select、brush:end。 - 套索:
lasso:select、lasso:end。
只有启用对应 Behavior 时,派生事件才会出现。
生命周期与数据事件
- 布局:
beforelayout、layout:start、layout:end、afterlayout。 - 渲染:
beforerender、afterrender。 - 容器与销毁:
resize、destroy。 - 数据:
datachange、afteradditem、afterremoveitem、afterupdateitem。 - Combo:
combo:collapse、combo:expand。
GraphEventMap 的值是参数元组,而不是单个 payload 类型,因此能够同时表达普通单参数事件和 destroy: [] 这类零参数事件:
import type { GraphEventMap } from '@antv/g6-lite';
type NodeClickPayload = GraphEventMap['node:click'][0];
type DestroyArguments = GraphEventMap['destroy']; // []取消监听
移除监听时必须使用同一个 handler 引用:
const handler = ({ nodeId }: GraphEventMap['node:click'][0]) => console.log(nodeId);
graph.on('node:click', handler);
graph.off('node:click', handler);一次性监听:
graph.once('afterrender', ({ nodeCount, edgeCount }) => {
console.log(nodeCount, edgeCount);
});自定义事件类型
graph.on/off/once 对未知字符串保留泛型 fallback:
graph.on('business:custom', (payload: { id: string }) => {
console.log(payload.id);
});自定义 Behavior 也可通过第二个泛型扩展事件图。当前只提供消费端类型兼容,不提供公开 emit API;不要依赖内部 graph.eventEmitter。详见自定义 Behavior。