fix(runtime-core): fix component .once listener logic

This commit is contained in:
Evan You
2020-10-20 09:49:53 -04:00
parent 6d2a1cb64d
commit 4bbb2b2ee6
2 changed files with 37 additions and 5 deletions

View File

@@ -105,17 +105,25 @@ export function emit(
handlerName = toHandlerKey(hyphenate(event))
handler = props[handlerName]
}
if (!handler) {
handler = props[handlerName + `Once`]
if (handler) {
callWithAsyncErrorHandling(
handler,
instance,
ErrorCodes.COMPONENT_EVENT_HANDLER,
args
)
}
const onceHandler = props[handlerName + `Once`]
if (onceHandler) {
if (!instance.emitted) {
;(instance.emitted = {} as Record<string, boolean>)[handlerName] = true
} else if (instance.emitted[handlerName]) {
return
}
}
if (handler) {
callWithAsyncErrorHandling(
handler,
onceHandler,
instance,
ErrorCodes.COMPONENT_EVENT_HANDLER,
args