【发布时间】:2020-04-17 17:00:56
【问题描述】:
我需要遍历 Formbuilder 中的所有控件,以及子表单构建器以清除验证器和 updateValueAndValidity。我怎样才能从这里更新答案?
Angular 2: Iterate over reactive form controls
Object.keys(this.form.controls).forEach(key => {
this.form.controls[key].clearValidators();
this.form.controls[key].updateValueAndValidity();
});
这里的表单在表单构建器等中有表单构建器。上面的答案只影响顶级子级,不影响子级等
this.editSharedForm = this.formBuilder.group({
'name': [null, [Validators.maxLength(50)]],
'streetAddress': [null, [Validators.maxLength(50)]],
'city': [null, [Validators.required,Validators.maxLength(200)]],
'zipcode': [null, [Validators.maxLength(10)]],
'phoneNumber': [null, [Validators.maxLength(50)]],
'emailAddress': [null, [Validators.maxLength(50), Validators.email]],
'addressChangeReason': this.formBuilder.group({
'addressChangeReasonId': [null, [Validators.required, Validators.min(1)]],
'addressChangeReasonCode': [null, [Validators.required, Validators.maxLength(50)]],
'addressChangeReasonDescription': [null, [Validators.required, Validators.maxLength(255)]]
}),
'addressSource': this.formBuilder.group({
'sourceOfAddressId': [null, [Validators.required, validatorDropdown]],
'sourceOfAddressCode': [null, [Validators.required, Validators.maxLength(50)]],
'sourceOfAddressDescription': [Validators.required, Validators.maxLength(255)]]
})
});
}
2) 此外,如果需要,我如何只针对 1 个子子项(例如 addressChange Reason)? 以下不工作
Object.keys(this.editSharedForm.get('addressChangeReason').controls).forEach(key => {
this.editSharedForm.controls[key].clearValidators();
this.editSharedForm.controls[key].updateValueAndValidity();
});
“AbstractControl”类型上不存在属性“控件”
【问题讨论】:
-
你试过
this.editSharedForm['controls'][key].clearValidators(); -
好吧,我是基于这个有很多选票的答案,让我也试试你的方法stackoverflow.com/a/42235220/12555362
-
或者你可以做
this.editSharedForm.get(key).clearValidators();
标签: angular typescript angular-reactive-forms angular8