Mar*_*hel 148
发现Object.keys可以处理这个..
Object.keys(this.form.controls).forEach(key => {
this.form.get(key).markAsDirty();
});
Run Code Online (Sandbox Code Playgroud)
Liv*_*lea 41
对于它的价值,还有另一种方法可以做到这一点,而不必使用Object.keys(...) magic:
for (const field in this.form.controls) { // 'field' is a string
const control = this.form.get(field); // 'control' is a FormControl
}
Run Code Online (Sandbox Code Playgroud)
Kee*_*ggs 32
对于平面结构,接受的答案是正确的,但并不能完全回答原始问题.网页可能需要嵌套的FormGroups和FormArrays,我们必须考虑到这一点以创建一个强大的解决方案.
public markControlsDirty(group: FormGroup | FormArray): void {
Object.keys(group.controls).forEach((key: string) => {
const abstractControl = group.controls[key];
if (abstractControl instanceof FormGroup || abstractControl instanceof FormArray) {
this.markControlsDirty(abstractControl);
} else {
abstractControl.markAsDirty();
}
});
}
Run Code Online (Sandbox Code Playgroud)
似乎该get 函数不再用于在 Angular 8 中检索表单中的特定值,所以这就是我根据@Liviu Ilea 的答案解决它的方法。
for (const field in this.myForm.controls) { // 'field' is a string
console.log(this.myForm.controls[field].value);
}
Run Code Online (Sandbox Code Playgroud)
Object.keys( this.registerForm.controls).forEach(key => {
this.registerForm.controls[key].markAsDirty();
});Run Code Online (Sandbox Code Playgroud)
使用@Marcos答案,我创建了一个函数,可以调用该函数,将formGroup作为参数传递,并将每个formGroup子控件标记为脏,例如,使其在代码周围的更多位置可用,例如将其放入服务中。
public touchAllFormFields(formGroup: FormGroup): void {
Object.keys(formGroup.controls).forEach((key) => {
formGroup.get(key).markAsDirty();
});
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你 ;)
小智 5
这就是对我有用的
private markFormGroupTouched(formGroup: FormGroup) {
Object.keys(formGroup.controls).forEach((key) => {
const control = formGroup.controls[key];
control.markAsDirty();
if ((control instanceof FormGroup)) {
this.markFormGroupTouched(control);
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57323 次 |
| 最近记录: |