Skip to content

Commit

Permalink
fix(runtime-core): fix emit listener check on kebab-case events (#2542)
Browse files Browse the repository at this point in the history
fix #2540
  • Loading branch information
shadowings-zy authored Nov 27, 2020
1 parent 2ab8c41 commit 3532b2b
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
13 changes: 12 additions & 1 deletion packages/runtime-core/__tests__/componentEmits.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -283,12 +283,23 @@ describe('component: emit', () => {
})

test('isEmitListener', () => {
const options = { click: null }
const options = {
click: null,
'test-event': null,
fooBar: null,
FooBaz: null
}
expect(isEmitListener(options, 'onClick')).toBe(true)
expect(isEmitListener(options, 'onclick')).toBe(false)
expect(isEmitListener(options, 'onBlick')).toBe(false)
// .once listeners
expect(isEmitListener(options, 'onClickOnce')).toBe(true)
expect(isEmitListener(options, 'onclickOnce')).toBe(false)
// kebab-case option
expect(isEmitListener(options, 'onTestEvent')).toBe(true)
// camelCase option
expect(isEmitListener(options, 'onFooBar')).toBe(true)
// PascalCase option
expect(isEmitListener(options, 'onFooBaz')).toBe(true)
})
})
7 changes: 4 additions & 3 deletions packages/runtime-core/src/componentEmits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -201,9 +201,10 @@ export function isEmitListener(
if (!options || !isOn(key)) {
return false
}
key = key.replace(/Once$/, '')
key = key.slice(2).replace(/Once$/, '')
return (
hasOwn(options, key[2].toLowerCase() + key.slice(3)) ||
hasOwn(options, key.slice(2))
hasOwn(options, key[0].toLowerCase() + key.slice(1)) ||
hasOwn(options, hyphenate(key)) ||
hasOwn(options, key)
)
}

0 comments on commit 3532b2b

Please sign in to comment.