【发布时间】:2020-01-29 10:35:54
【问题描述】:
我正在 Angular 中迈出第一步,必须为模板表单中的数字字段制作自定义最大验证器。就是这样:
import {Directive, Input} from '@angular/core';
import {AbstractControl, NG_VALIDATORS, ValidationErrors, Validator, ValidatorFn} from '@angular/forms';
@Directive({
selector: '[appMaximumValue]',
providers: [{provide: NG_VALIDATORS, useExisting: MaximumValueDirective, multi: true}]
})
export class MaximumValueDirective implements Validator {
@Input('appMaximumValue') maximumValue: number;
constructor() {
}
validate(control: AbstractControl): ValidationErrors | null {
return this.maximumValue ? maximumValueValidator(this.maximumValue)(control) : null;
}
}
export function maximumValueValidator(minimum: number): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } | null => {
return control.value > minimum ? {'maximumValue': {value: control.value}} : null;
};
}
想了想发现不用导出功能也可以:
import {Directive, Input} from '@angular/core';
import {AbstractControl, NG_VALIDATORS, ValidationErrors, Validator, ValidatorFn} from '@angular/forms';
@Directive({
selector: '[appMaximumValue]',
providers: [{provide: NG_VALIDATORS, useExisting: MaximumValueDirective, multi: true}]
})
export class MaximumValueDirective implements Validator {
@Input('appMaximumValue') maximumValue: number;
constructor() {
}
validate(control: AbstractControl): ValidationErrors | null {
return Number(control.value) > this.maximumValue ? {'maximumValue': {value: control.value}} : null;
}
}
所以我的问题是,这个导出功能的原因是什么?
【问题讨论】:
-
当在不同的组件/服务中注入类时,你可以使用它的方法。这就是您不需要导出 validate 方法的原因。
标签: angular angular7 customvalidator