Skip to content

Flow API 参考

组件

<yh-flow />

核心组件导出为 Flow,在文档中注册为 yh-flow

Props

来自 packages/flow/src/Flow.vue

属性类型说明
nodesNode[]节点列表(建议配合 width/height
edgesEdge[]连线列表
modelValueViewportTransform视口(x/y/zoom)
minZoomnumber最小缩放
maxZoomnumber最大缩放
zoomStepnumber缩放步长
nodesDraggableboolean节点是否可拖拽(只读时自动禁用)
edgesConnectableboolean是否允许创建连线
selectableboolean是否允许选择/框选
background'none' | 'dots' | 'grid'背景类型
backgroundColorstring背景颜色
gridSizenumber网格大小(也用于背景)
snapToGridboolean是否吸附到网格
snapGrid[number, number]网格吸附粒度
readonlyboolean只读模式(禁用拖拽、连线等)
showControlsboolean显示 Controls
showMinimapboolean显示 Minimap
minimapNodeColorstring小地图节点颜色
historyboolean是否启用历史记录(撤销/重做)
maxHistorynumber最大历史记录条数
keyboardShortcutsboolean是否启用快捷键
connectionValidator(connection) => boolean自定义连线校验(返回 false 表示禁止)
noCycleValidationboolean是否禁用“成环”校验
showAlignmentLinesboolean是否显示对齐线
snapThresholdnumber对齐吸附阈值(px)
nodeTypesNodeTypes自定义节点类型映射
edgeTypesEdgeTypes自定义连线类型映射
customNodeTemplatesRecord<string, any>节点模板,用于快速创建节点
interactiveMinimapboolean是否开启交互式小地图(点击跳转)
showLayoutControlsboolean是否在小地图显示布局控制按钮
layoutTypeLayoutType当前布局算法(dagre/elk/force/grid)
layoutDirection'TB' | 'BT' | 'LR' | 'RL'布局方向
enableExportboolean是否启用导出功能
exportFileNamestring导出文件的名称前缀

Events

事件参数说明
update:modelValue(value: ViewportTransform)视口变化(v-model)
update:nodes(nodes: Node[])节点变化(预留)
update:edges(edges: Edge[])连线变化(预留)
nodeClick{ node, nativeEvent }节点点击
nodeDblClick{ node, nativeEvent }节点双击
nodeDragStart{ node, nativeEvent }节点开始拖拽
nodeDrag{ node, nativeEvent, position }节点拖拽中
nodeDragEnd{ node, nativeEvent }节点结束拖拽
nodeContextMenu{ node, nativeEvent }节点右键菜单
edgeClick{ edge, nativeEvent }连线点击
edgeDblClick{ edge, nativeEvent }连线双击
edgeContextMenu{ edge, nativeEvent }连线右键菜单
edgeConnectConnection新连线创建成功
selectionChange{ selectedNodes, selectedEdges }选择变化
historyChange{ canUndo, canRedo }历史记录状态变化
viewportChangeViewportTransform视口变化(事件)
edgeUpdate{ edge, connection }连线更新(改变起点/终点)

实例方法 (FlowInstance)

通过 ref 获取组件实例后可调用的方法:

方法类型说明
addNode(node: Node) => void添加节点
removeNode(id: string) => void删除节点
updateNode(id: string, data: Partial<Node>) => void更新节点数据
addEdge(edge: Edge) => void添加连线
removeEdge(id: string) => void删除连线
updateEdge(id: string, data: Partial<Edge>) => void更新连线数据
fitView(options?: FitViewOptions) => void自动缩放以适应视口
zoomIn(factor?: number) => void放大视图
zoomOut(factor?: number) => void缩小视图
setViewport(vp: ViewportTransform) => void设置视口变换
screenToCanvas(x, y) => {x, y}屏幕坐标转画布坐标
canvasToScreen(x, y) => {x, y}画布坐标转屏幕坐标
usePlugin(plugin: FlowPlugin) => void注册插件
removePlugin(id: string) => void卸载插件
getNode(id: string) => Node获取指定节点实例
getEdge(id: string) => Edge获取指定连线实例
getNodes() => Node[]获取当前所有节点
getEdges() => Edge[]获取当前所有连线
getViewport() => ViewportTransform获取当前视口状态
centerView() => void视图居中
selectNode(id: string) => void选中指定节点
selectEdge(id: string) => void选中指定连线
clearSelection() => void清除所有选中
on / off(event, callback) => void事件订阅与取消
emit(event, payload) => void手动触发内部事件
exportFlowData(vp?) => string导出当前画布数据
importFlowData(json: string) => void导入画布数据
isNestedNode(node: Node) => boolean判断是否为嵌套节点
getNodeChildren(node: Node) => Node[]获取子节点列表
getNodeParent(node: Node) => Node获取父节点
isValidConnection(conn: Connection) => boolean校验连线是否合法
createNodeFromTemplate(type, id, pos, data?) => Node从模板创建节点
draggingNodeIdRef<string | null>当前正在拖拽的节点 ID
draggingPositionRef<{x, y} | null>当前拖拽的画布坐标
$elHTMLElement获取 Flow 容器 DOM 元素

Composables

@yh-ui/flow 导出 core composables:useViewportuseNodesuseEdgesuseSelectionuseHistoryuseKeyboard 等。

插件系统(面向插件开发者)

Flow 会通过 FlowContext 暴露一个 FlowInstance(见 packages/flow/src/plugins/plugin.ts),插件可以调用:

  • 状态nodes / edges / viewport
  • 操作addNode/removeNode/updateNode/getNodeaddEdge/removeEdge/updateEdge/getEdgesetViewport/fitView/zoomIn/zoomOut/centerView
  • 事件on/off/emit
  • 插件管理usePlugin/removePlugin

常用事件 key(节选):

  • node:click / node:drag / node:selected
  • edge:click / edge:connect / edge:selected
  • viewport:change
  • selection:change

性能基准

  • Flow - 性能基准压测/flow/benchmark

Released under the MIT License.