diff --git a/src/generators/nodes/Component.ts b/src/generators/nodes/Component.ts index e0a78d886c6b..481c7de0e392 100644 --- a/src/generators/nodes/Component.ts +++ b/src/generators/nodes/Component.ts @@ -307,9 +307,12 @@ export default class Component extends Node { ); } - block.builders.mount.addLine( - `if (${name}) ${name}._mount(${parentNode || '#target'}, ${parentNode ? 'null' : 'anchor'});` - ); + block.builders.mount.addBlock(deindent` + if (${name}) { + ${name}._mount(${parentNode || '#target'}, ${parentNode ? 'null' : 'anchor'}); + ${ref && `#component.refs.${ref.name} = ${name};`} + } + `); const updateMountNode = this.getUpdateMountNode(anchor); diff --git a/test/runtime/samples/dynamic-component-ref/Foo.html b/test/runtime/samples/dynamic-component-ref/Foo.html new file mode 100644 index 000000000000..bc56c4d89448 --- /dev/null +++ b/test/runtime/samples/dynamic-component-ref/Foo.html @@ -0,0 +1 @@ +Foo diff --git a/test/runtime/samples/dynamic-component-ref/_config.js b/test/runtime/samples/dynamic-component-ref/_config.js new file mode 100644 index 000000000000..5ab702935bab --- /dev/null +++ b/test/runtime/samples/dynamic-component-ref/_config.js @@ -0,0 +1,7 @@ +export default { + html: `Foo`, + + test(assert, component) { + assert.ok(component.refs.test); + } +}; diff --git a/test/runtime/samples/dynamic-component-ref/main.html b/test/runtime/samples/dynamic-component-ref/main.html new file mode 100644 index 000000000000..ff506517bc9d --- /dev/null +++ b/test/runtime/samples/dynamic-component-ref/main.html @@ -0,0 +1,11 @@ +<:Component {foo} ref:test/> + +