fix: directives shorthand normalize error (#12744)

fix #12743
This commit is contained in:
JuniorTour 2022-08-18 16:11:47 +08:00 committed by GitHub
parent 5221d4d3b6
commit 2263948c24
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 1 deletions

View File

@ -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)
}

View File

@ -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: `<div v-dir />`
}).$mount()
expect(spy).toHaveBeenCalled()
})
// #12561
it('setup props should be reactive', () => {
const msg = ref('hi')