@@ -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.
5056export 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