UNPKG

ngx-validation

Version:

angular two and above validation directives by ReactiveCore

53 lines (44 loc) 1.39 kB
import { Directive, forwardRef, Attribute } from '@angular/core'; import { Validator, AbstractControl, NG_VALIDATORS } from '@angular/forms'; @Directive({ selector: '[validateEqual][formControlName],' + '[validateEqual][formControl],[validateEqual][ngModel]', providers: [ {provide: NG_VALIDATORS, useExisting: forwardRef(() => EqualValidator), multi: true} ] }) export class EqualValidator implements Validator { constructor(@Attribute('validateEqual') public validateEqual: string, @Attribute('reverse') public reverse: string) { } private get isReverse(): boolean { if (!this.reverse) { return false; } return this.reverse === 'true' ? true : false; } validate(c: AbstractControl): {[key: string]: any} { // self value let v = c.value; // control value let e = c.root.get(this.validateEqual); // value not equal if (e && e.value !== '' && v !== e.value && !this.isReverse) { return { validateEqual: 'not equal' }; } // value equal and reverse if (e && v === e.value && this.isReverse) { delete e.errors['validateEqual']; if (!Object.keys(e.errors).length) { e.setErrors(null); } } // value not equal and reverse if (e && v !== e.value && this.isReverse) { e.setErrors({validateEqual: false}); } return null; } }