From d1a852c705833cf1d895c1ab1ac28d5c6261f960 Mon Sep 17 00:00:00 2001 From: likui <2218301630@qq.com> Date: Mon, 6 Jul 2020 20:00:03 +0800 Subject: [PATCH 1/2] fix(v-model): keep `v-model` with `undefined` insistent as 2.x fix #1528 --- packages/runtime-dom/__tests__/directives/vModel.spec.ts | 5 +++++ packages/runtime-dom/src/directives/vModel.ts | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/runtime-dom/__tests__/directives/vModel.spec.ts b/packages/runtime-dom/__tests__/directives/vModel.spec.ts index 339f96690c6..89fa24dbc91 100644 --- a/packages/runtime-dom/__tests__/directives/vModel.spec.ts +++ b/packages/runtime-dom/__tests__/directives/vModel.spec.ts @@ -48,6 +48,7 @@ describe('vModel', () => { const input = root.querySelector('input')! const data = root._vnode.component.data + expect(input.value).toEqual('') input.value = 'foo' triggerEvent('input', input) @@ -57,6 +58,10 @@ describe('vModel', () => { data.value = 'bar' await nextTick() expect(input.value).toEqual('bar') + + data.value = undefined + await nextTick() + expect(input.value).toEqual('') }) it('should work with multiple listeners', async () => { diff --git a/packages/runtime-dom/src/directives/vModel.ts b/packages/runtime-dom/src/directives/vModel.ts index 34008ecc9d8..e30df8b94a2 100644 --- a/packages/runtime-dom/src/directives/vModel.ts +++ b/packages/runtime-dom/src/directives/vModel.ts @@ -47,7 +47,7 @@ export const vModelText: ModelDirective< HTMLInputElement | HTMLTextAreaElement > = { beforeMount(el, { value, modifiers: { lazy, trim, number } }, vnode) { - el.value = value + if (value !== undefined && value !== null) el.value = value el._assign = getModelAssigner(vnode) const castToNumber = number || el.type === 'number' addEventListener(el, lazy ? 'change' : 'input', e => { @@ -85,6 +85,7 @@ export const vModelText: ModelDirective< return } } + if (value === undefined || value === null) value = '' el.value = value } } From 3a0980835a630bb680137cb53169e8e85acd156c Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 6 Jul 2020 18:42:01 -0400 Subject: [PATCH 2/2] Update vModel.ts --- packages/runtime-dom/src/directives/vModel.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/runtime-dom/src/directives/vModel.ts b/packages/runtime-dom/src/directives/vModel.ts index e30df8b94a2..512f7686783 100644 --- a/packages/runtime-dom/src/directives/vModel.ts +++ b/packages/runtime-dom/src/directives/vModel.ts @@ -47,7 +47,7 @@ export const vModelText: ModelDirective< HTMLInputElement | HTMLTextAreaElement > = { beforeMount(el, { value, modifiers: { lazy, trim, number } }, vnode) { - if (value !== undefined && value !== null) el.value = value + el.value = value == null ? '' : value el._assign = getModelAssigner(vnode) const castToNumber = number || el.type === 'number' addEventListener(el, lazy ? 'change' : 'input', e => { @@ -85,8 +85,7 @@ export const vModelText: ModelDirective< return } } - if (value === undefined || value === null) value = '' - el.value = value + el.value = value == null ? '' : value } }