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[