Tôi muốn markAsDirty
tất cả các điều khiển bên trong của a FormGroup
.
Tôi muốn markAsDirty
tất cả các điều khiển bên trong của a FormGroup
.
Câu trả lời:
Tìm ra Object.keys
có thể xử lý điều này ..
Object.keys(this.form.controls).forEach(key => {
this.form.get(key).markAsDirty();
});
Đối với Angular 8+, hãy sử dụng như sau (dựa trên câu trả lời của Michelangelo):
Object.keys(this.form.controls).forEach(key => {
this.form.controls[key].markAsDirty();
});
Đối với những gì nó đáng giá, có một cách khác để làm điều này mà không cần phải sử dụng phép thuật Object.keys (...) :
for (const field in this.form.controls) { // 'field' is a string
const control = this.form.get(field); // 'control' is a FormControl
}
Câu trả lời được chấp nhận là đúng cho cấu trúc dạng phẳng, nhưng không hoàn toàn trả lời câu hỏi ban đầu. Một trang web có thể yêu cầu các Nhóm Form và FormArrays lồng nhau và chúng tôi phải tính đến điều này để tạo ra một giải pháp mạnh mẽ.
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();
}
});
}
instanceof
luôn hoạt động sau khi được chuyển đổi bởi Typecript?
instanceof
không phải là từ khóa cụ thể của TypeScript ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) Cũng không phải là class
loại dữ liệu.
Bằng cách sử dụng câu trả lời @Marcos, tôi đã tạo một hàm có thể được gọi là truyền một tham số formGroup và nó đánh dấu mọi điều khiển con của formGroup là bẩn, chỉ để làm cho nó có thể sử dụng được từ nhiều nơi hơn xung quanh mã đặt nó bên trong một dịch vụ chẳng hạn.
public touchAllFormFields(formGroup: FormGroup): void {
Object.keys(formGroup.controls).forEach((key) => {
formGroup.get(key).markAsDirty();
});
}
hy vọng nó giúp ;)
Có vẻ như get
chức năng đó không hoạt động nữa để truy xuất các giá trị cụ thể trong biểu mẫu của bạn trong Angular 8, vì vậy đây là cách tôi giải quyết nó dựa trên câu trả lời của @Liviu Ilea.
for (const field in this.myForm.controls) { // 'field' is a string
console.log(this.myForm.controls[field].value);
}
Object.keys( this.registerForm.controls).forEach(key => {
this.registerForm.controls[key].markAsDirty();
});
Tôi tạo chức năng này để làm cho nó * Tôi có một điều khiển với tên 'order' và chuyển chỉ mục cho anh ta.
{"conditionGroups": [
{
"order": null,
"conditions": []
}
]
}
updateFormData() {
const control = <FormArray>this.form.controls['conditionGroups'];
control.value.map((x,index)=>{
x.order = index;
})
Cannot invoke an expression whose type lacks a call signature. Type 'AbstractControl' has no compatible call signatures.
Có ai biết tại sao không?