From: edison Date: Sat, 16 Mar 2024 08:28:03 +0000 (+0800) Subject: fix(custom-element): avoid setting attr to null if it is removed (#9012) X-Git-Tag: v3.4.22~53 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b49306adff4572d90a42ccd231387f16eb966bbe;p=thirdparty%2Fvuejs%2Fcore.git fix(custom-element): avoid setting attr to null if it is removed (#9012) Partially fixes #9006 Fixes #10324 --- diff --git a/packages/runtime-dom/__tests__/customElement.spec.ts b/packages/runtime-dom/__tests__/customElement.spec.ts index bb08fb1557..fb746f72c4 100644 --- a/packages/runtime-dom/__tests__/customElement.spec.ts +++ b/packages/runtime-dom/__tests__/customElement.spec.ts @@ -139,6 +139,12 @@ describe('defineCustomElement', () => { expect(e.shadowRoot!.innerHTML).toBe('
two
') expect(e.hasAttribute('foo')).toBe(false) + e.foo = undefined + await nextTick() + expect(e.shadowRoot!.innerHTML).toBe('
two
') + expect(e.hasAttribute('foo')).toBe(false) + expect(e.foo).toBe(undefined) + e.bazQux = 'four' await nextTick() expect(e.shadowRoot!.innerHTML).toBe('
four
') diff --git a/packages/runtime-dom/src/apiCustomElement.ts b/packages/runtime-dom/src/apiCustomElement.ts index 337a3d90f9..01ce2bad46 100644 --- a/packages/runtime-dom/src/apiCustomElement.ts +++ b/packages/runtime-dom/src/apiCustomElement.ts @@ -313,7 +313,7 @@ export class VueElement extends BaseClass { } protected _setAttr(key: string) { - let value = this.getAttribute(key) + let value = this.hasAttribute(key) ? this.getAttribute(key) : undefined const camelKey = camelize(key) if (this._numberProps && this._numberProps[camelKey]) { value = toNumber(value)