diff --git a/packages/vue-flow/src/container/VueFlow/VueFlow.vue b/packages/vue-flow/src/container/VueFlow/VueFlow.vue index ae03f2e7..1c29e9fd 100644 --- a/packages/vue-flow/src/container/VueFlow/VueFlow.vue +++ b/packages/vue-flow/src/container/VueFlow/VueFlow.vue @@ -127,7 +127,7 @@ onMounted(() => { vueFlowRef.value = el.value! }) -useHooks(emit, hooks.value) +useHooks(emit, hooks) provide(Slots, useSlots()) diff --git a/packages/vue-flow/src/store/hooks.ts b/packages/vue-flow/src/store/hooks.ts index 2a97dfa1..96eb38c3 100644 --- a/packages/vue-flow/src/store/hooks.ts +++ b/packages/vue-flow/src/store/hooks.ts @@ -1,3 +1,4 @@ +import type { Ref } from 'vue' import type { Emits, FlowHooks } from '~/types' // flow event hooks @@ -48,18 +49,18 @@ export const createHooks = (): FlowHooks => ({ updateNodeInternals: createEventHook(), }) -const bind = (emit: Emits, hooks: FlowHooks) => { - for (const [key, value] of Object.entries(hooks)) { - const listener = (data: any) => { - emit(key as any, data) +export default (emit: Emits, hooks: Ref) => { + onBeforeMount(() => { + for (const [key, value] of Object.entries(hooks.value)) { + const listener = (data: any) => { + emit(key as Emits extends (event: infer Event) => void ? Event : never, data) + } + + value.on(listener) + + tryOnScopeDispose(() => { + value.off(listener) + }) } - - value.on(listener) - - tryOnScopeDispose(() => { - value.off(listener) - }) - } + }) } - -export default (emit: Emits, hooks: FlowHooks) => bind(emit, hooks)