angular - 反应式表单:将表单组中的所有控件标记为脏
问题描述
我有带有表单的 Angular 6 应用程序。这是一个例子
export class ExampleComponent implements OnInit {
form: FormGroup;
constructor(private fb: FormBuilder) { }
ngOnInit() {
this.form = new FormGroup({
first: new FormControl(),
last: new FormControl()
});
this.markControlsAsDirty(this.form);
}
markControlsAsDirty(form: FormGroup) {
this.form.get('first').markAsDirty();
this.form.get('last').markAsDirty();
}
}
我不想获得单个控件并标记每个字段。我可以将表单组中的所有控件标记为脏吗?
更新我已经添加了stackblitz 示例以显示之前的两个答案是错误的
解决方案
如果你有一个复杂的表单结构,你可以隔离代码来标记FormGroup
,FormArray
或者FormControl
作为脏。请参阅此处的示例:将表单标记为脏
markDirty() {
this.markGroupDirty(this.form);
console.log('FORM:', this.form);}
markGroupDirty(formGroup: FormGroup) {
Object.keys(formGroup.controls).forEach(key => {
switch (formGroup.get(key).constructor.name) {
case "FormGroup":
this.markGroupDirty(formGroup.get(key) as FormGroup);
break;
case "FormArray":
this.markArrayDirty(formGroup.get(key) as FormArray);
break;
case "FormControl":
this.markControlDirty(formGroup.get(key) as FormControl);
break;
}
});
}
markArrayDirty(formArray: FormArray) {
formArray.controls.forEach(control => {
switch (control.constructor.name) {
case "FormGroup":
this.markGroupDirty(control as FormGroup);
break;
case "FormArray":
this.markArrayDirty(control as FormArray);
break;
case "FormControl":
this.markControlDirty(control as FormControl);
break;
}
});
}
markControlDirty(formControl: FormControl) {
formControl.markAsDirty();
}
推荐阅读
- react-native - React-Native 购物车 - 无法将数据传递到购物车屏幕
- macos - 无法在 macos 上安装/链接 wget
- apache-spark - 在 Pyspark 中从 Rest Api 创建数据框时出错
- php - 使用 codeigniter 版本 4 显示 xml
- python - 多次附加用户输入
- java - java spring mvc 404未找到示例Spring MVC的错误
- django - HTML模板上的Django过滤器功能
- javascript - 如何将具有数组作为值的对象键值对转换为键值对的多个对象?
- javascript - Web cookie 和本地存储有什么区别?
- python - 使用 pandas 数据框中的值作为另一个的列名