]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(v-model): consistent nullish value handling with 2.x (#1530)
authorunderfin <2218301630@qq.com>
Mon, 6 Jul 2020 23:02:33 +0000 (07:02 +0800)
committerGitHub <noreply@github.com>
Mon, 6 Jul 2020 23:02:33 +0000 (19:02 -0400)
fix #1528

packages/runtime-dom/__tests__/directives/vModel.spec.ts
packages/runtime-dom/src/directives/vModel.ts

index 339f96690c6ed0a8ea30dba8348c9af1adf75809..89fa24dbc9141e7a7f09d2eda7d119ee59259e24 100644 (file)
@@ -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 () => {
index 34008ecc9d8fb0fc57768adb3e50293b622dfef5..512f76867836e619b8a6ba7519bb640295b947f8 100644 (file)
@@ -47,7 +47,7 @@ export const vModelText: ModelDirective<
   HTMLInputElement | HTMLTextAreaElement
 > = {
   beforeMount(el, { value, modifiers: { lazy, trim, number } }, vnode) {
-    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,7 +85,7 @@ export const vModelText: ModelDirective<
         return
       }
     }
-    el.value = value
+    el.value = value == null ? '' : value
   }
 }