@@ -294,26 +294,29 @@ class InputCheckbox {
294
294
final NgModel ngModel;
295
295
final NgTrueValue ngTrueValue;
296
296
final NgFalseValue ngFalseValue;
297
+ final NgModelOptions ngModelOptions;
297
298
final Scope scope;
298
299
299
300
InputCheckbox (dom.Element this .inputElement, this .ngModel,
300
- this .scope, this .ngTrueValue, this .ngFalseValue) {
301
+ this .scope, this .ngTrueValue, this .ngFalseValue, this .ngModelOptions ) {
301
302
ngModel.render = (value) {
302
303
scope.rootScope.domWrite (() {
303
304
inputElement.checked = ngTrueValue.isValue (value);
304
305
});
305
306
};
306
307
inputElement
307
- ..onChange.listen ((_) {
308
- ngModel.viewValue = inputElement.checked
309
- ? ngTrueValue.value : ngFalseValue.value;
310
- })
311
- ..onBlur.listen ((e) {
308
+ ..onChange.listen ((_) => ngModelOptions.executeChangeFunc (() {
309
+ ngModel.viewValue = inputElement.checked ? ngTrueValue.value : ngFalseValue.value;
310
+ }))
311
+ ..onBlur.listen ((_) => ngModelOptions.executeBlurFunc (() {
312
312
ngModel.markAsTouched ();
313
- });
313
+ })) ;
314
314
}
315
315
}
316
316
317
+
318
+
319
+
317
320
/**
318
321
* Usage:
319
322
*
@@ -337,37 +340,42 @@ class InputCheckbox {
337
340
class InputTextLike {
338
341
final dom.Element inputElement;
339
342
final NgModel ngModel;
343
+ final NgModelOptions ngModelOptions;
340
344
final Scope scope;
341
345
String _inputType;
342
346
347
+
343
348
get typedValue => (inputElement as dynamic ).value;
344
349
void set typedValue (value) {
345
350
(inputElement as dynamic ).value = (value == null ) ? '' : value.toString ();
346
351
}
347
352
348
- InputTextLike (this .inputElement, this .ngModel, this .scope) {
353
+ InputTextLike (this .inputElement, this .ngModel, this .scope, this .ngModelOptions ) {
349
354
ngModel.render = (value) {
350
355
scope.rootScope.domWrite (() {
351
356
if (value == null ) value = '' ;
352
357
353
358
var currentValue = typedValue;
354
359
if (value != currentValue && ! (value is num && currentValue is num &&
355
360
value.isNaN && currentValue.isNaN)) {
356
- typedValue = value;
361
+ typedValue = value;
357
362
}
358
363
});
359
364
};
365
+
360
366
inputElement
361
- ..onChange.listen (processValue)
362
- ..onInput.listen (processValue)
363
- ..onBlur.listen ((e ) {
367
+ ..onChange.listen ((event) => ngModelOptions. executeChangeFunc (() => processValue (event)) )
368
+ ..onInput.listen ((event) => ngModelOptions. executeInputFunc (() => processValue (event)) )
369
+ ..onBlur.listen ((_) => ngModelOptions. executeBlurFunc (( ) {
364
370
ngModel.markAsTouched ();
365
- });
371
+ })) ;
366
372
}
367
373
368
374
void processValue ([_]) {
369
375
var value = typedValue;
376
+
370
377
if (value != ngModel.viewValue) ngModel.viewValue = value;
378
+
371
379
ngModel.validate ();
372
380
}
373
381
}
@@ -394,6 +402,7 @@ class InputTextLike {
394
402
class InputNumberLike {
395
403
final dom.InputElement inputElement;
396
404
final NgModel ngModel;
405
+ final NgModelOptions ngModelOptions;
397
406
final Scope scope;
398
407
399
408
@@ -414,7 +423,7 @@ class InputNumberLike {
414
423
}
415
424
}
416
425
417
- InputNumberLike (dom.Element this .inputElement, this .ngModel, this .scope) {
426
+ InputNumberLike (dom.Element this .inputElement, this .ngModel, this .scope, this .ngModelOptions ) {
418
427
ngModel.render = (value) {
419
428
scope.rootScope.domWrite (() {
420
429
if (value != typedValue
@@ -424,11 +433,11 @@ class InputNumberLike {
424
433
});
425
434
};
426
435
inputElement
427
- ..onChange.listen (relaxFnArgs ( processValue))
428
- ..onInput.listen (relaxFnArgs ( processValue))
429
- ..onBlur.listen ((e ) {
436
+ ..onChange.listen ((event) => ngModelOptions. executeChangeFunc (() => processValue () ))
437
+ ..onInput.listen ((event) => ngModelOptions. executeInputFunc (() => processValue () ))
438
+ ..onBlur.listen ((_) => ngModelOptions. executeBlurFunc (( ) {
430
439
ngModel.markAsTouched ();
431
- });
440
+ })) ;
432
441
}
433
442
434
443
void processValue () {
@@ -586,11 +595,12 @@ class InputDateLike {
586
595
toFactory: (Injector i) => new NgBindTypeForDateLike (i.get (dom.Element )));
587
596
final dom.InputElement inputElement;
588
597
final NgModel ngModel;
598
+ final NgModelOptions ngModelOptions;
589
599
final Scope scope;
590
600
NgBindTypeForDateLike ngBindType;
591
601
592
602
InputDateLike (dom.Element this .inputElement, this .ngModel, this .scope,
593
- this .ngBindType) {
603
+ this .ngBindType, this .ngModelOptions ) {
594
604
if (inputElement.type == 'datetime-local' ) {
595
605
ngBindType.idlAttrKind = NgBindTypeForDateLike .NUMBER ;
596
606
}
@@ -600,11 +610,11 @@ class InputDateLike {
600
610
});
601
611
};
602
612
inputElement
603
- ..onChange.listen (relaxFnArgs ( processValue))
604
- ..onInput.listen (relaxFnArgs ( processValue))
605
- ..onBlur.listen ((e ) {
613
+ ..onChange.listen ((event) => ngModelOptions. executeChangeFunc (() => processValue () ))
614
+ ..onInput.listen ((event) => ngModelOptions. executeInputFunc (() => processValue () ))
615
+ ..onBlur.listen ((_) => ngModelOptions. executeBlurFunc (( ) {
606
616
ngModel.markAsTouched ();
607
- });
617
+ })) ;
608
618
}
609
619
610
620
dynamic get typedValue => ngBindType.inputTypedValue;
@@ -680,7 +690,9 @@ class NgValue {
680
690
NgValue (this .element);
681
691
682
692
@NgOneWay ('ng-value' )
683
- void set value (val) { this ._value = val; }
693
+ void set value (val) {
694
+ this ._value = val;
695
+ }
684
696
dynamic get value => _value == null ? (element as dynamic ).value : _value;
685
697
}
686
698
@@ -767,7 +779,7 @@ class InputRadio {
767
779
..onClick.listen ((_) {
768
780
if (radioButtonElement.checked) ngModel.viewValue = ngValue.value;
769
781
})
770
- ..onBlur.listen ((e ) {
782
+ ..onBlur.listen ((event ) {
771
783
ngModel.markAsTouched ();
772
784
});
773
785
}
@@ -785,8 +797,8 @@ class InputRadio {
785
797
*/
786
798
@Decorator (selector: '[contenteditable][ng-model]' )
787
799
class ContentEditable extends InputTextLike {
788
- ContentEditable (dom.Element inputElement, NgModel ngModel, Scope scope)
789
- : super (inputElement, ngModel, scope);
800
+ ContentEditable (dom.Element inputElement, NgModel ngModel, Scope scope, NgModelOptions modelOptions )
801
+ : super (inputElement, ngModel, scope, modelOptions );
790
802
791
803
// The implementation is identical to InputTextLike but use innerHtml instead of value
792
804
String get typedValue => (inputElement as dynamic ).innerHtml;
0 commit comments