Przeglądaj źródła

fix(compiler-core): should not remove slot node with `v-else` (#11150)

_Kerman 1 rok temu
rodzic
commit
e102670bde

+ 1 - 0
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(
     expect((root as any).children[0].codegenNode.patchFlag).toMatch(
       PatchFlags.DYNAMIC_SLOTS + '',
       PatchFlags.DYNAMIC_SLOTS + '',
     )
     )
+    expect((root as any).children[0].children.length).toBe(3)
     expect(generate(root).code).toMatchSnapshot()
     expect(generate(root).code).toMatchSnapshot()
   })
   })
 
 

+ 1 - 4
packages/compiler-core/src/transforms/vSlot.ts

@@ -226,10 +226,7 @@ export function buildSlots(
           break
           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)
         __TEST__ && assert(dynamicSlots.length > 0)
         // attach this slot to previous conditional
         // attach this slot to previous conditional
         let conditional = dynamicSlots[
         let conditional = dynamicSlots[