]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(v-model): ensure v-model listener casing is consistent with manual v-on listener...
author三咲智子 Kevin Deng <sxzz@sxzz.moe>
Mon, 14 Nov 2022 07:21:29 +0000 (15:21 +0800)
committerGitHub <noreply@github.com>
Mon, 14 Nov 2022 07:21:29 +0000 (02:21 -0500)
fix #7066

packages/compiler-core/__tests__/transforms/__snapshots__/vModel.spec.ts.snap
packages/compiler-core/__tests__/transforms/vModel.spec.ts
packages/compiler-core/src/transforms/vModel.ts

index 42974581f604bad767fe17e9bb601b72013cfab5..8cc085572af9d9bcd8ee24e2384fda75decfc09b 100644 (file)
@@ -83,9 +83,9 @@ return function render(_ctx, _cache) {
     const { openBlock: _openBlock, createElementBlock: _createElementBlock } = _Vue
 
     return (_openBlock(), _createElementBlock(\\"input\\", {
-      value: model,
-      \\"onUpdate:value\\": $event => ((model) = $event)
-    }, null, 40 /* PROPS, HYDRATE_EVENTS */, [\\"value\\", \\"onUpdate:value\\"]))
+      \\"foo-value\\": model,
+      \\"onUpdate:fooValue\\": $event => ((model) = $event)
+    }, null, 40 /* PROPS, HYDRATE_EVENTS */, [\\"foo-value\\", \\"onUpdate:fooValue\\"]))
   }
 }"
 `;
index b4b8c33cda62578ce32a1094a9ec30a9dc55bc83..808fb94215ef832116029cbbddb8eb46afeb6ed0 100644 (file)
@@ -253,13 +253,13 @@ describe('compiler: transform v-model', () => {
   })
 
   test('with argument', () => {
-    const root = parseWithVModel('<input v-model:value="model" />')
+    const root = parseWithVModel('<input v-model:foo-value="model" />')
     const node = root.children[0] as ElementNode
     const props = ((node.codegenNode as VNodeCall).props as ObjectExpression)
       .properties
     expect(props[0]).toMatchObject({
       key: {
-        content: 'value',
+        content: 'foo-value',
         isStatic: true
       },
       value: {
@@ -270,7 +270,7 @@ describe('compiler: transform v-model', () => {
 
     expect(props[1]).toMatchObject({
       key: {
-        content: 'onUpdate:value',
+        content: 'onUpdate:fooValue',
         isStatic: true
       },
       value: {
index bf5e69beb2c677e9b6ad250795c9121954647eb6..3f13f32709837bdc4099ff31a6a48d16cc56e3a6 100644 (file)
@@ -18,6 +18,7 @@ import {
 } from '../utils'
 import { IS_REF } from '../runtimeHelpers'
 import { BindingTypes } from '../options'
+import { camelize } from '@vue/shared'
 
 export const transformModel: DirectiveTransform = (dir, node, context) => {
   const { exp, arg } = dir
@@ -77,7 +78,7 @@ export const transformModel: DirectiveTransform = (dir, node, context) => {
   const propName = arg ? arg : createSimpleExpression('modelValue', true)
   const eventName = arg
     ? isStaticExp(arg)
-      ? `onUpdate:${arg.content}`
+      ? `onUpdate:${camelize(arg.content)}`
       : createCompoundExpression(['"onUpdate:" + ', arg])
     : `onUpdate:modelValue`