Как вызвать функцию проверки на ngOnChanges в директиве проверки в Angular?
Как вызвать функцию проверки на ngOnChanges в директиве проверки в Angular?
Я обнаружил ngOnChanges, но он не работает, чтобы вызвать функцию проверки
@Directive({
selector: '[uppercase]',
providers: [{
provide: NG_VALIDATORS,
useExisting: RdUppercaseDirective,
multi: true
}]
})
export class RdUppercaseDirective implements Validator, OnChanges {
@Input('uppercase') uppercase: any;
r = new rdValidators;
validate(control: AbstractControl): {
[key: string]: any
} | null {
let u = this.uppercase === 'false' || this.uppercase === false ? false : true;
if(!control.value)
{
return null;
}
if(u === false)
{
return null;
}
var result = (/[a-z]/.test(control.value));
return control.dirty && control.value ? result ? { 'uppercase' : true } : null : null;
}
ngOnChanges(changes: SimpleChanges){
if(changes.uppercase){
//**How to Trigger Validate Function Here!**
}
}
}
0 ответов
Всякий раз, когда вызывается функция validate, мы будем иметь контроль. Этот элемент управления будет передаваться по умолчанию, когда Angular проверяет форму (поведение по умолчанию). Но когда мы вызываем функцию validate в ngOnChanges, нам нужен экземпляр control(AbstractControl), для которого мы можем сохранить абстрактный элемент управления параметром в частном свойстве и использовать его при вызове вручную.
@Directive({
selector: '[uppercase]',
providers: [{
provide: NG_VALIDATORS,
useExisting: RdUppercaseDirective,
multi: true
}]
})
export class RdUppercaseDirective implements Validator, OnChanges {
@Input('uppercase') uppercase: any;
private _control: AbstractControl;
r = new rdValidators;
validate(control: AbstractControl): {
[key: string]: any
} | null {
this._control = control
let u = this.uppercase === 'false' || this.uppercase === false ? false : true;
if(!control.value)
{
return null;
}
if(u === false)
{
return null;
}
var result = (/[a-z]/.test(control.value));
return control.dirty && control.value ? result ? { 'uppercase' : true } : null : null;
}
ngOnChanges(changes: SimpleChanges){
if(changes.uppercase){
//** you can access _control object here to call your validation function
this._control.updateValueAndValidity();
//** this will update value and call validation function.
}