From aa9f9ea7e3049464c26034af4e426eec26939d2d Mon Sep 17 00:00:00 2001 From: daiwei Date: Sat, 16 Aug 2025 22:24:06 +0800 Subject: [PATCH] refactor: update SlotFnBuilder to include parent parameter in buildSlots --- packages/compiler-core/src/transforms/vSlot.ts | 13 ++++++++++--- .../src/transforms/ssrTransformComponent.ts | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/compiler-core/src/transforms/vSlot.ts b/packages/compiler-core/src/transforms/vSlot.ts index 43296dcc9b..da29d0de89 100644 --- a/packages/compiler-core/src/transforms/vSlot.ts +++ b/packages/compiler-core/src/transforms/vSlot.ts @@ -100,6 +100,7 @@ export type SlotFnBuilder = ( vFor: DirectiveNode | undefined, slotChildren: TemplateChildNode[], loc: SourceLocation, + parent: ElementNode, ) => FunctionExpression const buildClientSlotFn: SlotFnBuilder = (props, _vForExp, children, loc) => @@ -147,7 +148,7 @@ export function buildSlots( slotsProperties.push( createObjectProperty( arg || createSimpleExpression('default', true), - buildSlotFn(exp, undefined, children, loc), + buildSlotFn(exp, undefined, children, loc, node), ), ) } @@ -200,7 +201,13 @@ export function buildSlots( } const vFor = findDir(slotElement, 'for') - const slotFunction = buildSlotFn(slotProps, vFor, slotChildren, slotLoc) + const slotFunction = buildSlotFn( + slotProps, + vFor, + slotChildren, + slotLoc, + slotElement, + ) // check if this slot is conditional (v-if/v-for) let vIf: DirectiveNode | undefined @@ -304,7 +311,7 @@ export function buildSlots( props: ExpressionNode | undefined, children: TemplateChildNode[], ) => { - const fn = buildSlotFn(props, undefined, children, loc) + const fn = buildSlotFn(props, undefined, children, loc, node) if (__COMPAT__ && context.compatConfig) { fn.isNonScopedSlot = true } diff --git a/packages/compiler-ssr/src/transforms/ssrTransformComponent.ts b/packages/compiler-ssr/src/transforms/ssrTransformComponent.ts index 94492449e7..c940bb88de 100644 --- a/packages/compiler-ssr/src/transforms/ssrTransformComponent.ts +++ b/packages/compiler-ssr/src/transforms/ssrTransformComponent.ts @@ -142,9 +142,9 @@ export const ssrTransformComponent: NodeTransform = (node, context) => { // fallback in case the child is render-fn based). Store them in an array // for later use. if (clonedNode.children.length) { - buildSlots(clonedNode, context, (props, vFor, children) => { + buildSlots(clonedNode, context, (props, vFor, children, _loc, parent) => { vnodeBranches.push( - createVNodeSlotBranch(props, vFor, children, context, clonedNode), + createVNodeSlotBranch(props, vFor, children, context, parent), ) return createFunctionExpression(undefined) }) -- 2.47.3