From: Thorsten Luenborg Date: Wed, 13 Oct 2021 19:31:30 +0000 (+0200) Subject: fix(custom-elements): ensure props are available before initial render. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2Flinusborg%2Fce-initial-props-4716;p=thirdparty%2Fvuejs%2Fcore.git fix(custom-elements): ensure props are available before initial render. --- diff --git a/packages/runtime-dom/__tests__/customElement.spec.ts b/packages/runtime-dom/__tests__/customElement.spec.ts index 60b51de389..eb9e25e758 100644 --- a/packages/runtime-dom/__tests__/customElement.spec.ts +++ b/packages/runtime-dom/__tests__/customElement.spec.ts @@ -191,13 +191,21 @@ describe('defineCustomElement', () => { test('handling properties set before upgrading', () => { const E = defineCustomElement({ - props: ['foo'], + props: { + foo: String, + dataAge: Number + }, + setup(props) { + expect(props.foo).toBe('hello') + expect(props.dataAge).toBe(5) + }, render() { return `foo: ${this.foo}` } }) const el = document.createElement('my-el-upgrade') as any el.foo = 'hello' + el.dataset.age = 5 container.appendChild(el) customElements.define('my-el-upgrade', E) expect(el.shadowRoot.innerHTML).toBe(`foo: hello`) diff --git a/packages/runtime-dom/src/apiCustomElement.ts b/packages/runtime-dom/src/apiCustomElement.ts index a532da4c6c..37356c86f2 100644 --- a/packages/runtime-dom/src/apiCustomElement.ts +++ b/packages/runtime-dom/src/apiCustomElement.ts @@ -233,7 +233,7 @@ export class VueElement extends BaseClass { } if (numberProps) { this._numberProps = numberProps - this._update() + // this._update() } // check if there are props set pre-upgrade or connect @@ -258,7 +258,9 @@ export class VueElement extends BaseClass { const asyncDef = (this._def as ComponentOptions).__asyncLoader if (asyncDef) { - asyncDef().then(resolve) + asyncDef() + .then(resolve) + .then(() => this._update()) } else { resolve(this._def) }