1 import {AfterViewInit, Directive, ElementRef, forwardRef, Input} from '@angular/core';
2 import {AbstractControl, NG_VALIDATORS, ValidatorFn, Validators} from '@angular/forms';
4 import {NumberWrapperParseFloat} from '../core/number-wrapper-parse';
7 selector: '[min][ngModel],[min][formControl],[min][formControlName]',
9 provide: NG_VALIDATORS,
10 useExisting: forwardRef(() => MinValidatorDirective),
15 export class MinValidatorDirective implements AfterViewInit {
16 private _validator: ValidatorFn;
17 private inputElement: any;
18 constructor(elementRef: ElementRef) {
19 this.inputElement = elementRef;
22 this.inputElement = this.inputElement.nativeElement.querySelector('input');
23 if (this.inputElement && this.inputElement.querySelector('input')) {
24 this._validator = min(NumberWrapperParseFloat(
25 this.inputElement.querySelector('input').getAttribute('min')));
29 set min(minValue: string) {
30 this._validator = min(NumberWrapperParseFloat(minValue));
33 validate(c: AbstractControl): {[key: string]: any} {
34 return this._validator(c);
38 function min(minvalue: number): ValidatorFn {
39 return (control: AbstractControl): {[key: string]: any} => {
40 if (Validators.required(control) !== undefined &&
41 Validators.required(control) !== null) {
44 let v: Number = Number(control.value);
46 {'min': {'requiredValue': minvalue, 'actualValue': v}} :