fix(custom-element): fix event listeners with capital letter event names on custom elements

close https://github.com/vuejs/docs/issues/1708
close https://github.com/vuejs/docs/pull/1890
This commit is contained in:
Evan You
2022-08-30 14:07:35 +08:00
parent 9f8f07ed38
commit 0739f8909a
7 changed files with 99 additions and 12 deletions

View File

@@ -5,14 +5,21 @@ import { warn } from '../warning'
* For prefixing keys in v-on="obj" with "on"
* @private
*/
export function toHandlers(obj: Record<string, any>): Record<string, any> {
export function toHandlers(
obj: Record<string, any>,
preserveCaseIfNecessary?: boolean
): Record<string, any> {
const ret: Record<string, any> = {}
if (__DEV__ && !isObject(obj)) {
warn(`v-on with no argument expects an object value.`)
return ret
}
for (const key in obj) {
ret[toHandlerKey(key)] = obj[key]
ret[
preserveCaseIfNecessary && /[A-Z]/.test(key)
? `on:${key}`
: toHandlerKey(key)
] = obj[key]
}
return ret
}