File tree 2 files changed +40
-2
lines changed
2 files changed +40
-2
lines changed Original file line number Diff line number Diff line change @@ -1269,4 +1269,41 @@ describe('vModel', () => {
1269
1269
expect ( foo . selected ) . toEqual ( true )
1270
1270
expect ( bar . selected ) . toEqual ( true )
1271
1271
} )
1272
+
1273
+ // #10503
1274
+ test ( 'equal value with a leading 0 should trigger update.' , async ( ) => {
1275
+ const setNum = function ( this : any , value : any ) {
1276
+ this . num = value
1277
+ }
1278
+ const component = defineComponent ( {
1279
+ data ( ) {
1280
+ return { num : 0 }
1281
+ } ,
1282
+ render ( ) {
1283
+ return [
1284
+ withVModel (
1285
+ h ( 'input' , {
1286
+ id : 'input_num1' ,
1287
+ type : 'number' ,
1288
+ 'onUpdate:modelValue' : setNum . bind ( this ) ,
1289
+ } ) ,
1290
+ this . num ,
1291
+ ) ,
1292
+ ]
1293
+ } ,
1294
+ } )
1295
+
1296
+ render ( h ( component ) , root )
1297
+ const data = root . _vnode . component . data
1298
+
1299
+ const inputNum1 = root . querySelector ( '#input_num1' ) !
1300
+ expect ( inputNum1 . value ) . toBe ( '0' )
1301
+
1302
+ inputNum1 . value = '01'
1303
+ triggerEvent ( 'input' , inputNum1 )
1304
+ await nextTick ( )
1305
+ expect ( data . num ) . toBe ( 1 )
1306
+
1307
+ expect ( inputNum1 . value ) . toBe ( '1' )
1308
+ } )
1272
1309
} )
Original file line number Diff line number Diff line change @@ -86,9 +86,10 @@ export const vModelText: ModelDirective<
86
86
el [ assignKey ] = getModelAssigner ( vnode )
87
87
// avoid clearing unresolved text. #2302
88
88
if ( ( el as any ) . composing ) return
89
-
90
89
const elValue =
91
- number || el . type === 'number' ? looseToNumber ( el . value ) : el . value
90
+ ( number || el . type === 'number' ) && ! / ^ 0 \d / . test ( el . value )
91
+ ? looseToNumber ( el . value )
92
+ : el . value
92
93
const newValue = value == null ? '' : value
93
94
94
95
if ( elValue === newValue ) {
You can’t perform that action at this time.
0 commit comments