From e102670bde00417c3a5b0262c855b297c0e4169e Mon Sep 17 00:00:00 2001 From: _Kerman Date: Sat, 22 Jun 2024 17:08:39 +0800 Subject: [PATCH] fix(compiler-core): should not remove slot node with `v-else` (#11150) --- packages/compiler-core/__tests__/transforms/vSlot.spec.ts | 1 + packages/compiler-core/src/transforms/vSlot.ts | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/compiler-core/__tests__/transforms/vSlot.spec.ts b/packages/compiler-core/__tests__/transforms/vSlot.spec.ts index aa7b600ccbe..3afcf0fc053 100644 --- a/packages/compiler-core/__tests__/transforms/vSlot.spec.ts +++ b/packages/compiler-core/__tests__/transforms/vSlot.spec.ts @@ -696,6 +696,7 @@ describe('compiler: transform component slots', () => { expect((root as any).children[0].codegenNode.patchFlag).toMatch( PatchFlags.DYNAMIC_SLOTS + '', ) + expect((root as any).children[0].children.length).toBe(3) expect(generate(root).code).toMatchSnapshot() }) diff --git a/packages/compiler-core/src/transforms/vSlot.ts b/packages/compiler-core/src/transforms/vSlot.ts index 1b95e6f71db..db367f39c0c 100644 --- a/packages/compiler-core/src/transforms/vSlot.ts +++ b/packages/compiler-core/src/transforms/vSlot.ts @@ -226,10 +226,7 @@ export function buildSlots( break } } - if (prev && isTemplateNode(prev) && findDir(prev, 'if')) { - // remove node - children.splice(i, 1) - i-- + if (prev && isTemplateNode(prev) && findDir(prev, /^(else-)?if$/)) { __TEST__ && assert(dynamicSlots.length > 0) // attach this slot to previous conditional let conditional = dynamicSlots[