diff --git a/packages/compiler-core/src/transforms/transformSlotOutlet.ts b/packages/compiler-core/src/transforms/transformSlotOutlet.ts index f3d5c0c7..6de8b134 100644 --- a/packages/compiler-core/src/transforms/transformSlotOutlet.ts +++ b/packages/compiler-core/src/transforms/transformSlotOutlet.ts @@ -7,7 +7,7 @@ import { SlotOutletNode, createFunctionExpression } from '../ast' -import { isSlotOutlet, findProp } from '../utils' +import { isSlotOutlet, isBindKey, isStaticExp } from '../utils' import { buildProps, PropsExpression } from './transformElement' import { createCompilerError, ErrorCodes } from '../errors' import { RENDER_SLOT } from '../runtimeHelpers' @@ -54,35 +54,32 @@ export function processSlotOutlet( let slotName: string | ExpressionNode = `"default"` let slotProps: PropsExpression | undefined = undefined - // check for - const name = findProp(node, 'name') - if (name) { - if (name.type === NodeTypes.ATTRIBUTE && name.value) { - // static name - slotName = JSON.stringify(name.value.content) - } else if (name.type === NodeTypes.DIRECTIVE && name.exp) { - // dynamic name - slotName = name.exp + const nonNameProps = [] + for (let i = 0; i < node.props.length; i++) { + const p = node.props[i] + if (p.type === NodeTypes.ATTRIBUTE) { + if (p.value) { + if (p.name === 'name') { + slotName = JSON.stringify(p.value.content) + } else { + p.name = camelize(p.name) + nonNameProps.push(p) + } + } + } else { + if (p.name === 'bind' && isBindKey(p.arg, 'name')) { + if (p.exp) slotName = p.exp + } else { + if (p.name === 'bind' && p.arg && isStaticExp(p.arg)) { + p.arg.content = camelize(p.arg.content) + } + nonNameProps.push(p) + } } } - const propsWithoutName = name - ? node.props.filter(p => p !== name) - : node.props - - if (propsWithoutName.length > 0) { - //#2488 - propsWithoutName.forEach(prop => { - if ( - prop.type === NodeTypes.DIRECTIVE && - prop.arg && - prop.arg.type === NodeTypes.SIMPLE_EXPRESSION - ) { - prop.arg.content = camelize(prop.arg.content) - } - }) - - const { props, directives } = buildProps(node, context, propsWithoutName) + if (nonNameProps.length > 0) { + const { props, directives } = buildProps(node, context, nonNameProps) slotProps = props if (directives.length) {