From 2263948c249e7486403bc5880712e6d9fd15c17f Mon Sep 17 00:00:00 2001 From: JuniorTour Date: Thu, 18 Aug 2022 16:11:47 +0800 Subject: [PATCH] fix: directives shorthand normalize error (#12744) fix #12743 --- src/core/vdom/modules/directives.ts | 10 +++++++++- test/unit/features/v3/apiSetup.spec.ts | 13 +++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/core/vdom/modules/directives.ts b/src/core/vdom/modules/directives.ts index 9e4a87f7..853b2002 100644 --- a/src/core/vdom/modules/directives.ts +++ b/src/core/vdom/modules/directives.ts @@ -103,7 +103,15 @@ function normalizeDirectives( } res[getRawDirName(dir)] = dir if (vm._setupState && vm._setupState.__sfc) { - dir.def = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name) + const setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name) + if (typeof setupDef === 'function') { + dir.def = { + bind: setupDef, + update: setupDef, + } + } else { + dir.def = setupDef + } } dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true) } diff --git a/test/unit/features/v3/apiSetup.spec.ts b/test/unit/features/v3/apiSetup.spec.ts index 7c69d06d..11757878 100644 --- a/test/unit/features/v3/apiSetup.spec.ts +++ b/test/unit/features/v3/apiSetup.spec.ts @@ -251,6 +251,19 @@ describe('api: setup context', () => { expect(spy).toHaveBeenCalled() }) + // #12743 + it('directive resolution for shorthand', () => { + const spy = vi.fn() + new Vue({ + setup: () => ({ + __sfc: true, + vDir: spy + }), + template: `
` + }).$mount() + expect(spy).toHaveBeenCalled() + }) + // #12561 it('setup props should be reactive', () => { const msg = ref('hi')