]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(v-model): unnecessary value binding error should apply to dynamic instead of...
authorEvan You <yyx990803@gmail.com>
Wed, 15 Nov 2023 00:51:50 +0000 (08:51 +0800)
committerEvan You <yyx990803@gmail.com>
Wed, 15 Nov 2023 00:51:50 +0000 (08:51 +0800)
close #3596

packages/compiler-dom/__tests__/transforms/vModel.spec.ts
packages/compiler-dom/src/transforms/vModel.ts

index dce8f09b02c19280524fa21ce33179fe2ee9bf12..a67ca5d691f7faab0a5d3014dd9b65a3e4881d62 100644 (file)
@@ -137,6 +137,27 @@ describe('compiler: transform v-model', () => {
         })
       )
     })
+
+    test('should error on dynamic value binding alongside v-model', () => {
+      const onError = vi.fn()
+      transformWithModel(`<input v-model="test" :value="test" />`, {
+        onError
+      })
+      expect(onError).toHaveBeenCalledWith(
+        expect.objectContaining({
+          code: DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE
+        })
+      )
+    })
+
+    // #3596
+    test('should NOT error on static value binding alongside v-model', () => {
+      const onError = vi.fn()
+      transformWithModel(`<input v-model="test" value="test" />`, {
+        onError
+      })
+      expect(onError).not.toHaveBeenCalled()
+    })
   })
 
   describe('modifiers', () => {
index 5dff390d3d89b234e6b1d2bc64adf2b2f64ae44c..bc1f6fcd27bf044a5a7723cd05cb64f5d81da932 100644 (file)
@@ -4,7 +4,9 @@ import {
   ElementTypes,
   findProp,
   NodeTypes,
-  hasDynamicKeyVBind
+  hasDynamicKeyVBind,
+  findDir,
+  isStaticArgOf
 } from '@vue/compiler-core'
 import { createDOMCompilerError, DOMErrorCodes } from '../errors'
 import {
@@ -32,8 +34,8 @@ export const transformModel: DirectiveTransform = (dir, node, context) => {
   }
 
   function checkDuplicatedValue() {
-    const value = findProp(node, 'value')
-    if (value) {
+    const value = findDir(node, 'bind')
+    if (value && isStaticArgOf(value.arg, 'value')) {
       context.onError(
         createDOMCompilerError(
           DOMErrorCodes.X_V_MODEL_UNNECESSARY_VALUE,