angular2-text-equality-validator
Version:
Angular 2 text equality validator, compare password
54 lines (47 loc) • 1.33 kB
text/typescript
import { Directive, forwardRef } from '@angular/core';
import { NG_VALIDATORS, Validator, AbstractControl } from '@angular/forms';
import { Input } from "@angular/core";
({
selector: '[validateEqualTo][ngModel],[validateEqualTo][formControlName]',
providers: [
{provide: NG_VALIDATORS, useExisting: forwardRef(() => EqualTextValidator), multi: true}
]
})
export class EqualTextValidator implements Validator {
() validateEqualTo : string;
private _onChange : () => void;
oldVal : string;
registerOnValidatorChange( fn : () => void ) {
this._onChange = fn;
}
/**
*
* @param c
* @returns {{validateEqual: boolean}|null}
*/
validate( c : AbstractControl ) {
let passwordVal = c.value;
let repeatEle = c.root.get(this.validateEqualTo);
if( repeatEle ) {
this.oldVal = repeatEle.value;
}
c.root.valueChanges.subscribe(changes => {
if( this.oldVal !== changes[this.validateEqualTo] ) {
this._onChange();
}
});
return this.checkEquality(passwordVal, repeatEle);
}
/**
*
* @param passwordVal
* @param repeatEle
* @returns {any}
*/
checkEquality( passwordVal: string, repeatEle: any ) {
if( repeatEle && passwordVal !== repeatEle.value ) return {
validateEqual: true
}
return null;
}
}