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`)
|
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', () => {
|
test('do not resolve component from non-script-setup bindings', () => {
|
||||||
const bindingMetadata = {
|
const bindingMetadata = {
|
||||||
Example: BindingTypes.SETUP_MAYBE_REF
|
Example: BindingTypes.SETUP_MAYBE_REF
|
||||||
|
|
|
@ -385,6 +385,13 @@ function resolveSetupReference(name: string, context: TransformContext) {
|
||||||
`${context.helperString(UNREF)}(${fromMaybeRef})`
|
`${context.helperString(UNREF)}(${fromMaybeRef})`
|
||||||
: `$setup[${JSON.stringify(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
|
export type PropsExpression = ObjectExpression | CallExpression | ExpressionNode
|
||||||
|
|
Loading…
Reference in New Issue