Skip to content

Commit 8fbe48f

Browse files
authored
fix(v-model): handle number modifier on change (#13959)
close #13958
1 parent 6cbdf78 commit 8fbe48f

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,9 @@ describe('vModel', () => {
345345
triggerEvent('input', number)
346346
await nextTick()
347347
expect(data.number).toEqual(1.2)
348+
triggerEvent('change', number)
349+
await nextTick()
350+
expect(number.value).toEqual('1.2')
348351

349352
trim.value = ' hello, world '
350353
triggerEvent('input', trim)

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

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ type ModelDirective<T, Modifiers extends string = string> = ObjectDirective<
4545
Modifiers
4646
>
4747

48+
function castValue(value: string, trim?: boolean, number?: boolean | null) {
49+
if (trim) value = value.trim()
50+
if (number) value = looseToNumber(value)
51+
return value
52+
}
53+
4854
// We are exporting the v-model runtime directly as vnode hooks so that it can
4955
// be tree-shaken in case v-model is never used.
5056
export const vModelText: ModelDirective<
@@ -57,18 +63,11 @@ export const vModelText: ModelDirective<
5763
number || (vnode.props && vnode.props.type === 'number')
5864
addEventListener(el, lazy ? 'change' : 'input', e => {
5965
if ((e.target as any).composing) return
60-
let domValue: string | number = el.value
61-
if (trim) {
62-
domValue = domValue.trim()
63-
}
64-
if (castToNumber) {
65-
domValue = looseToNumber(domValue)
66-
}
67-
el[assignKey](domValue)
66+
el[assignKey](castValue(el.value, trim, castToNumber))
6867
})
69-
if (trim) {
68+
if (trim || castToNumber) {
7069
addEventListener(el, 'change', () => {
71-
el.value = el.value.trim()
70+
el.value = castValue(el.value, trim, castToNumber)
7271
})
7372
}
7473
if (!lazy) {

0 commit comments

Comments
 (0)