From: _Kerman Date: Sat, 22 Jun 2024 09:08:39 +0000 (+0800) Subject: fix(compiler-core): should not remove slot node with `v-else` (#11150) X-Git-Tag: v3.4.30~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e102670bde00417c3a5b0262c855b297c0e4169e;p=thirdparty%2Fvuejs%2Fcore.git fix(compiler-core): should not remove slot node with `v-else` (#11150) --- diff --git a/packages/compiler-core/__tests__/transforms/vSlot.spec.ts b/packages/compiler-core/__tests__/transforms/vSlot.spec.ts index aa7b600ccb..3afcf0fc05 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 1b95e6f71d..db367f39c0 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[