angular - 如何根据变量的当前值验证输入(自定义验证器函数)?
问题描述
我的表单上有一个输入字段,需要验证该数字不大于 1,000,000 且不小于帐户余额。我能够将最大值设置为 1,000,000,但无法成功地将余额与输入进行比较。我希望这会导致输入字段周围出现红色轮廓,类似于超过 1,000,000 的情况。这是我的代码:
HTML 模板
<mat-form-field appearance = outline class="amount">
<mat-label>Amount</mat-label>
<input matInput
type='number'
required
formControlName="amount">
</mat-form-field>
零件
export class StartComponent implements OnInit {
currentAccount: ICustomerAccount;
amountMax = 1000000;
startForm = new FormGroup({
amount: new FormControl('', Validators.max(this.amountMax)),
});
}
解决方案
您需要一个 CustomValidator 函数,如此处所述:https ://angular.io/guide/form-validation
@Component({
selector: 'app-validator-test',
templateUrl: './validator-test.component.html'
})
export class ValidatorTestComponent implements OnInit {
public startForm: FormGroup;
public amountMax = 5000;
public currentAccount: any = {value: 10};
constructor(private formBuilder: FormBuilder) {}
public ngOnInit(): void {
this.startForm = this.formBuilder.group({
amount: ['', [Validators.max(this.amountMax), this.customValidatorFn()]]
});
}
private customValidatorFn(): ValidatorFn {
return (control: AbstractControl): ValidationErrors | null => {
const valid: boolean = this.currentAccount.value <= control.value;
return valid ? null : {amountMinError: true};
};
}
}
模板:
<form [formGroup]="startForm" *ngIf="startForm">
<input formControlName="amount" type="number"/>
<div>valid: {{startForm.get('amount').valid}}</div>
</form>
不要忘记将 FormsModule 和 ReactiveFormsModule 添加到模块导入中:imports: [BrowserModule, FormsModule, ReactiveFormsModule],
推荐阅读
- java - JsonPath 在 Spring Cloud Data Flow 过滤器组件中无法正常工作
- highcharts - Highcharts 导出服务器布局算法错误
- java - Java 8 JVM 堆大小不断缩小
- dns - 来自需要主机标头的 AKS 后端的 Azure FrontDoor 的 503 响应
- google-api - 使用 DropZone.js 通过 signedUrl 将 MP3 上传到 Google Cloud Storage 已损坏
- c# - 是否可以使用 LINQ 根据列值选择记录并以特定顺序将这些记录插入到集合中?
- codeigniter - 需要了解 CodeIgniter 中的 $config["uri_segment"] 相关代码
- reactjs - Chrome 中的 React DevTools 问题
- r - mgcv:predict.bam() 中的标准误差不同,离散 = true
- c# - 如何从 EF Core 调用 DB2 表值函数