Browse Source

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

ref: https://github.com/vuejs/vue/issues/12591
pull/6231/head
Evan You 3 years ago
parent
commit
769e5555f9
  1. 13
      packages/compiler-sfc/__tests__/compileScript.spec.ts
  2. 2
      packages/compiler-sfc/src/compileScript.ts

13
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
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) {

Loading…
Cancel
Save