Sfoglia il codice sorgente

fix(v-model): consistent nullish value handling with 2.x (#1530)

fix #1528
underfin 6 anni fa
parent
commit
425335c28b

+ 5 - 0
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 () => {

+ 2 - 2
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
+    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
   }
 }