ngx-validation
Version:
angular two and above validation directives by ReactiveCore
53 lines (44 loc) • 1.39 kB
text/typescript
import { Directive, forwardRef, Attribute } from '@angular/core';
import { Validator, AbstractControl, NG_VALIDATORS } from '@angular/forms';
({
selector: '[validateEqual][formControlName],' +
'[validateEqual][formControl],[validateEqual][ngModel]',
providers: [
{provide: NG_VALIDATORS, useExisting: forwardRef(() => EqualValidator), multi: true}
]
})
export class EqualValidator implements Validator {
constructor(('validateEqual') public validateEqual: string,
('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;
}
}