feat(runtime-core): emit now returns array of return values from all triggered handlers

close #635
This commit is contained in:
Evan You
2020-01-20 11:24:08 -05:00
parent aca2c2a81e
commit e81c8a32c7
4 changed files with 124 additions and 8 deletions

View File

@@ -24,7 +24,8 @@ import {
isObject,
NO,
makeMap,
isPromise
isPromise,
isArray
} from '@vue/shared'
import { SuspenseBoundary } from './components/Suspense'
import { CompilerOptions } from '@vue/compiler-core'
@@ -70,7 +71,7 @@ export const enum LifecycleHooks {
ERROR_CAPTURED = 'ec'
}
export type Emit = (event: string, ...args: unknown[]) => void
export type Emit = (event: string, ...args: unknown[]) => any[]
export interface SetupContext {
attrs: Data
@@ -218,16 +219,19 @@ export function defineComponentInstance(
rtc: null,
ec: null,
emit: (event, ...args) => {
emit: (event, ...args): any[] => {
const props = instance.vnode.props || EMPTY_OBJ
const handler = props[`on${event}`] || props[`on${capitalize(event)}`]
if (handler) {
callWithAsyncErrorHandling(
const res = callWithAsyncErrorHandling(
handler,
instance,
ErrorCodes.COMPONENT_EVENT_HANDLER,
args
)
return isArray(res) ? res : [res]
} else {
return []
}
}
}