From: Evan You Date: Mon, 6 Jul 2020 20:58:46 +0000 (-0400) Subject: fix(v-model): should ignore compiled v-model listeners in attr fallthrough X-Git-Tag: v3.0.0-beta.19~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6dd59ee301d8d93e7ca14447243d07a653e69159;p=thirdparty%2Fvuejs%2Fcore.git fix(v-model): should ignore compiled v-model listeners in attr fallthrough fix #1510 --- diff --git a/packages/runtime-core/src/componentProps.ts b/packages/runtime-core/src/componentProps.ts index e1b3ab8a41..0eaed8c2d7 100644 --- a/packages/runtime-core/src/componentProps.ts +++ b/packages/runtime-core/src/componentProps.ts @@ -190,19 +190,20 @@ export function updateProps( for (const key in rawCurrentProps) { if ( !rawProps || - ( - // for camelCase - !hasOwn(rawProps, key) && + // for camelCase + (!hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case // and converted to camelCase (#955) ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) ) { if (options) { - if (rawPrevProps && ( + if ( + rawPrevProps && // for camelCase - rawPrevProps[key] !== undefined || - // for kebab-case - rawPrevProps[kebabKey!] !== undefined)) { + (rawPrevProps[key] !== undefined || + // for kebab-case + rawPrevProps[kebabKey!] !== undefined) + ) { props[key] = resolvePropValue( options, rawProps || EMPTY_OBJ, @@ -255,7 +256,11 @@ function setFullProps( let camelKey if (options && hasOwn(options, (camelKey = camelize(key)))) { props[camelKey] = value - } else if (!emits || !isEmitListener(emits, key)) { + } else if ( + (!emits || !isEmitListener(emits, key)) && + // ignore v-model listeners + !key.startsWith(`onUpdate:`) + ) { // Any non-declared (either as a prop or an emitted event) props are put // into a separate `attrs` object for spreading. Make sure to preserve // original key casing