Răsfoiți Sursa

fix(compiler-sfc): fix template usage check edge case for v-on statements

ref: https://github.com/vuejs/vue/issues/12591
Evan You 4 ani în urmă
părinte
comite
769e5555f9

+ 13 - 0
packages/compiler-sfc/__tests__/compileScript.spec.ts

@@ -461,6 +461,19 @@ defineExpose({ foo: 123 })
       expect(content).toMatch(`return { a, b, Baz }`)
       assertCode(content)
     })
+
+    // vuejs/vue#12591
+    test('v-on inline statement', () => {
+      // should not error
+      compile(`
+      <script setup lang="ts">
+        import { foo } from './foo'
+      </script>
+      <template>
+        <div @click="$emit('update:a');"></div>
+      </tempalte>
+      `)
+    })
   })
 
   describe('inlineTemplate mode', () => {

+ 2 - 0
packages/compiler-sfc/src/compileScript.ts

@@ -2134,6 +2134,8 @@ function processExp(exp: string, dir?: string): string {
   if (/ as\s+\w|<.*>|:/.test(exp)) {
     if (dir === 'slot') {
       exp = `(${exp})=>{}`
+    } else if (dir === 'on') {
+      exp = `()=>{${exp}}`
     } else if (dir === 'for') {
       const inMatch = exp.match(forAliasRE)
       if (inMatch) {