fix(runtime-dom): attribute should be removed with nullish values (#2679)

fix #2677
This commit is contained in:
edison 2020-12-01 08:28:03 +08:00 committed by GitHub
parent 64d4681e4b
commit fb6b9f8e8f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 0 deletions

View File

@ -120,6 +120,23 @@ describe('runtime-dom: props patching', () => {
patchProp(el, 'id', null, '') patchProp(el, 'id', null, '')
expect(el.hasAttribute('id')).toBe(true) expect(el.hasAttribute('id')).toBe(true)
// #2677
const img = document.createElement('img')
patchProp(img, 'width', null, '')
expect(el.hasAttribute('width')).toBe(false)
patchProp(img, 'width', null, 0)
expect(img.hasAttribute('width')).toBe(true)
patchProp(img, 'width', null, null)
expect(img.hasAttribute('width')).toBe(false)
patchProp(img, 'width', null, 0)
expect(img.hasAttribute('width')).toBe(true)
patchProp(img, 'width', null, undefined)
expect(img.hasAttribute('width')).toBe(false)
patchProp(img, 'width', null, 0)
expect(img.hasAttribute('width')).toBe(true)
}) })
test('form attribute', () => { test('form attribute', () => {

View File

@ -41,6 +41,10 @@ export function patchDOMProp(
// e.g. <div :id="null"> // e.g. <div :id="null">
el[key] = '' el[key] = ''
el.removeAttribute(key) el.removeAttribute(key)
} else if ((value == null || value === '') && typeof el[key] === 'number') {
// e.g. <img :width="null">
el[key] = 0
el.removeAttribute(key)
} else { } else {
// some properties perform value validation and throw // some properties perform value validation and throw
try { try {