From: Evan You Date: Mon, 30 Nov 2020 20:19:22 +0000 (-0500) Subject: fix(compiler-core): fix scope var reference check for v-on expressions X-Git-Tag: v3.0.4~26 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9db70959621c7df44807324a3b1a41caa2b261eb;p=thirdparty%2Fvuejs%2Fcore.git fix(compiler-core): fix scope var reference check for v-on expressions fix #2564 --- diff --git a/packages/compiler-core/__tests__/transforms/vSlot.spec.ts b/packages/compiler-core/__tests__/transforms/vSlot.spec.ts index 9d8beca616..a14198c8ad 100644 --- a/packages/compiler-core/__tests__/transforms/vSlot.spec.ts +++ b/packages/compiler-core/__tests__/transforms/vSlot.spec.ts @@ -521,6 +521,21 @@ describe('compiler: transform component slots', () => { `, true ) + + // #2564 + assertDynamicSlots( + `
+
`, + true + ) + + assertDynamicSlots( + `
+
`, + false + ) }) test('named slot with v-if', () => { diff --git a/packages/compiler-core/src/transforms/vOn.ts b/packages/compiler-core/src/transforms/vOn.ts index 207d53e419..02dd979603 100644 --- a/packages/compiler-core/src/transforms/vOn.ts +++ b/packages/compiler-core/src/transforms/vOn.ts @@ -79,7 +79,12 @@ export const transformOn: DirectiveTransform = ( // process the expression since it's been skipped if (!__BROWSER__ && context.prefixIdentifiers) { isInlineStatement && context.addIdentifiers(`$event`) - exp = processExpression(exp, context, false, hasMultipleStatements) + exp = dir.exp = processExpression( + exp, + context, + false, + hasMultipleStatements + ) isInlineStatement && context.removeIdentifiers(`$event`) // with scope analysis, the function is hoistable if it has no reference // to scope variables.