dart angular2 - validate number in form
No, but you can create your own, something like this
const NUMBER_VALIDATOR = const Provider(NG_VALIDATORS, useExisting: NumberValidator, multi: true);@Directive( selector: "input[type=number][ngControl],input[type=number][ngFormControl],input[type=number][ngModel])", providers: const [NUMBER_VALIDATOR])class NumberValidator implements Validator { ValidatorFn _validator; NumberValidator(@Attribute("min") String minStr, @Attribute("max") String maxStr) { final num min = minStr == null ? null : num.parse(minStr); final num max = maxStr == null ? null : num.parse(maxStr); this._validator = NumberValidators.minMaxNumberValidator(min, max); } Map<String, dynamic> validate(AbstractControl c) { return this._validator(c); }}abstract class NumberValidators { NumberValidators._(); static ValidatorFn minMaxNumberValidator(num min, num max) { return (AbstractControl control) { if (Validators.required(control) != null) { return null; } final num value = control.value; if (value != null) { if (min != null && value < min) { return {"min": {"required": min, "actual": value}}; } if (max != null && value > max) { return {"max": {"required": max, "actual": value}}; } } return null; }; }}
And then you should add NumberValidator
to your component's directives
list.Also, if you want to bind variables to min
and max
, you need not just to pass values into constructor, but re-initialize _validator
callback on each min
and max
attribute set. And in fact may be better to split it to two separate validators (in my case there is also step
validator, that can not work separately).