diff --git a/packages/compiler-core/__tests__/transforms/vSlot.spec.ts b/packages/compiler-core/__tests__/transforms/vSlot.spec.ts index 9d8beca6..a14198c8 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 207d53e4..02dd9796 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.