Răsfoiți Sursa

fix(v-model): should ignore compiled v-model listeners in attr fallthrough

fix #1510
Evan You 6 ani în urmă
părinte
comite
6dd59ee301
1 a modificat fișierele cu 13 adăugiri și 8 ștergeri
  1. 13 8
      packages/runtime-core/src/componentProps.ts

+ 13 - 8
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