Add/remove 对动态创建的输入的反应式表单验证器
Add/remove reactive form validators to dynamically created inputs
我在 Angular 4 中创建了一个表单,它允许用户单击表单中的“添加”或“删除”按钮将 add/remove 个字段添加到表单中。我使用 ngFor 从数组创建屏幕上的 html 输入(通过添加函数放大,或通过删除函数缩小)。
在 html 模板中,我可以在表单 formControlName="control{{index}}" 中添加 formControlName 以确保每个新输入都有一个表单控件。
但是我如何为这些输入动态地添加和删除验证器?
你能看看这个文档吗https://angular.io/api/forms/AbstractControl#updateValueAndValidity,
对于 add/remove 控件,您可以使用这些方法
addControl/removeControl
对于值和验证器,您可以像这样使用
this.form.controls['test_control'].setValidators([Validators.required])
this.form.controls['test_control'].updateValueAndValidity()
来源Link
对于 Angular 11 使用 setValidators() 和 updateValueAndValidity() 方法
setRequired() {
this.profileForm.controls.firstName.setValidators([Validators.required]);
this.profileForm.controls.firstName.updateValueAndValidity();
}
unsetRequired() {
this.profileForm.controls.firstName.setValidators(null);
this.profileForm.controls.firstName.updateValueAndValidity();
}
Angular 13. 它对我有用...
OnInit 函数:
ngOnInit() {
this.form.get('type')?.valueChanges.subscribe((val) => {
if (val) {
switch (val) {
case 1:
this.removeValidators(['comment', 'id']);
this.addValidators(['desc', 'options']);
break;
case 2:
this.removeValidators(['desc', 'options', 'comment']);
this.addValidators(['id']);
break;
}
}
});
}
函数(Add/Remove 验证器):
addValidators(controls : string[]){
controls.forEach(c => {
if(['desc','comment'].includes(c)){
this.form.get(c)?.setValidators([Validators.required,Validators.maxLength(250)]);
} else {
this.form.get(c)?.setValidators(Validators.required);
}
this.form.get(c)?.updateValueAndValidity();
});
}
removeValidators(controls : string[]){
controls.forEach(c => {
this.form.get(c)?.clearValidators();
this.form.get(c)?.updateValueAndValidity();
});
}
我在 Angular 4 中创建了一个表单,它允许用户单击表单中的“添加”或“删除”按钮将 add/remove 个字段添加到表单中。我使用 ngFor 从数组创建屏幕上的 html 输入(通过添加函数放大,或通过删除函数缩小)。
在 html 模板中,我可以在表单 formControlName="control{{index}}" 中添加 formControlName 以确保每个新输入都有一个表单控件。
但是我如何为这些输入动态地添加和删除验证器?
你能看看这个文档吗https://angular.io/api/forms/AbstractControl#updateValueAndValidity,
对于 add/remove 控件,您可以使用这些方法
addControl/removeControl
对于值和验证器,您可以像这样使用
this.form.controls['test_control'].setValidators([Validators.required])
this.form.controls['test_control'].updateValueAndValidity()
来源Link
对于 Angular 11 使用 setValidators() 和 updateValueAndValidity() 方法
setRequired() {
this.profileForm.controls.firstName.setValidators([Validators.required]);
this.profileForm.controls.firstName.updateValueAndValidity();
}
unsetRequired() {
this.profileForm.controls.firstName.setValidators(null);
this.profileForm.controls.firstName.updateValueAndValidity();
}
Angular 13. 它对我有用...
OnInit 函数:
ngOnInit() {
this.form.get('type')?.valueChanges.subscribe((val) => {
if (val) {
switch (val) {
case 1:
this.removeValidators(['comment', 'id']);
this.addValidators(['desc', 'options']);
break;
case 2:
this.removeValidators(['desc', 'options', 'comment']);
this.addValidators(['id']);
break;
}
}
});
}
函数(Add/Remove 验证器):
addValidators(controls : string[]){
controls.forEach(c => {
if(['desc','comment'].includes(c)){
this.form.get(c)?.setValidators([Validators.required,Validators.maxLength(250)]);
} else {
this.form.get(c)?.setValidators(Validators.required);
}
this.form.get(c)?.updateValueAndValidity();
});
}
removeValidators(controls : string[]){
controls.forEach(c => {
this.form.get(c)?.clearValidators();
this.form.get(c)?.updateValueAndValidity();
});
}