mirror of https://github.com/vuejs/core.git
fix(compiler-sfc): support resolving components from props (#8785)
This commit is contained in:
parent
9845f1d2a1
commit
7cbcee3d83
|
@ -152,6 +152,28 @@ describe('compiler: element transform', () => {
|
|||
expect(node.tag).toBe(`Foo.Example`)
|
||||
})
|
||||
|
||||
test('resolve namespaced component from props bindings (inline)', () => {
|
||||
const { root, node } = parseWithElementTransform(`<Foo.Example/>`, {
|
||||
inline: true,
|
||||
bindingMetadata: {
|
||||
Foo: BindingTypes.PROPS
|
||||
}
|
||||
})
|
||||
expect(root.helpers).not.toContain(RESOLVE_COMPONENT)
|
||||
expect(node.tag).toBe(`_unref(__props["Foo"]).Example`)
|
||||
})
|
||||
|
||||
test('resolve namespaced component from props bindings (non-inline)', () => {
|
||||
const { root, node } = parseWithElementTransform(`<Foo.Example/>`, {
|
||||
inline: false,
|
||||
bindingMetadata: {
|
||||
Foo: BindingTypes.PROPS
|
||||
}
|
||||
})
|
||||
expect(root.helpers).not.toContain(RESOLVE_COMPONENT)
|
||||
expect(node.tag).toBe('_unref($props["Foo"]).Example')
|
||||
})
|
||||
|
||||
test('do not resolve component from non-script-setup bindings', () => {
|
||||
const bindingMetadata = {
|
||||
Example: BindingTypes.SETUP_MAYBE_REF
|
||||
|
|
|
@ -385,6 +385,13 @@ function resolveSetupReference(name: string, context: TransformContext) {
|
|||
`${context.helperString(UNREF)}(${fromMaybeRef})`
|
||||
: `$setup[${JSON.stringify(fromMaybeRef)}]`
|
||||
}
|
||||
|
||||
const fromProps = checkType(BindingTypes.PROPS)
|
||||
if (fromProps) {
|
||||
return `${context.helperString(UNREF)}(${
|
||||
context.inline ? '__props' : '$props'
|
||||
}[${JSON.stringify(fromProps)}])`
|
||||
}
|
||||
}
|
||||
|
||||
export type PropsExpression = ObjectExpression | CallExpression | ExpressionNode
|
||||
|
|
Loading…
Reference in New Issue