【发布时间】:2021-03-31 00:14:45
【问题描述】:
我有一个自定义指令验证器,它使用输入来检查有效性。使用原始值,有效性工作得很好。但是,如果我更新输入,验证器仍然会显示错误并且不会重新评估该值。如何在输入更新时强制重新评估?
指令:
export class TimeRangeValidatorDirective implements Validator {
@Input() maxTime;
@Input() minTime;
validate(control: AbstractControl): ValidationErrors | null {
return CustomValidators.timeRange(this.maxTime, this.minTime)(control);
}
}
当最小或最大时间更新时,我想让验证重新运行,这样如果新的最大值高于控制值或新的最小值低于它,以前的错误将不会持续
编辑 基于@Kevin Zhang 给出的答案(为了清楚起见,在此重写)
解决办法:
export class TimeRangeValidatorDirective implements Validator {
private _onChange?: ()=>void;
private _maxTime;
private _minTime;
@Input()
get maxTime() { return this._maxTime}
set maxTime(value) {
this._maxTime = value;
if(this._onChange) {
this._onChange();
}
}
@Input()
get minTime() { return this._minTime}
set minTime(value) {
this._minTime = value;
if(this._onChange) {
this._onChange();
}
}
validate(control: AbstractControl): ValidationErrors | null {
return CustomValidators.timeRange(this.maxTime, this.minTime)(control);
}
registerOnValidatorChanges(fn:()=>void): void {
this._onChange = fn;
}
}
【问题讨论】:
标签: angular validation angular-directive