【发布时间】:2019-11-03 09:55:26
【问题描述】:
我有如下反应形式:
this.newReporterform = this.formBuilder.group({
rptrTitle: formBuilder.group({
reporterTitle: new FormControl(),
reporterTitleNV:new FormControl()
}, {validator: this.bothEmptyValidator}) ,
rptrfirstName: formBuilder.group({
reporterFName: new FormControl(),
reporterFNameNV:new FormControl()
}, {validator: this.bothEmptyValidator}) ,
rptrmiddleName: formBuilder.group({
reporterMName: new FormControl(),
reporterMNameNV:new FormControl()
}, {validator: this.bothEmptyValidator}) ,
rptrLastName: formBuilder.group({
reporterLName: new FormControl(),
reporterLNameNV:new FormControl()
}, {validator: this.bothEmptyValidator}) ,
});
上面的HTML示例视图如下:
<form [formGroup]="newReporterform" (ngSubmit)="onSubmit()" >
<div class="col-sm-12 ">
<div class="form-group" formGroupName="rptrfirstName" >
<span>First Name / Given Name </span>
<div class="input-group" >
<input type="text" class="form-control " [(ngModel)]="reporterFName" formControlName="reporterFName">
<select class="form-control col-sm-3" style="font-size:13px;" [(ngModel)]="reporterFNameNV" formControlName="reporterFNameNV">
<option value="0" >Pls select</option>
<option value="1" >Option1</option>
<option value="2" >Option2</option>
<option value="3" >Option3</option>
<option value="4" >Option4</option>
</select>
</div>
<div class='text-danger' *ngIf="newReporterform.controls.rptrfirstName.controls.hasError('bothEmpty')">
Please enter information in one of the above fields.
</div>
</div>
</div>
<div class="col-sm-12">
<div class="form-group" formGroupName="rptrmiddleName">
<span>Middle Name </span>
<div class="input-group">
<input type="text" class="form-control " [(ngModel)]="reporterMName" formControlName="reporterMName">
<select class="form-control col-sm-3" style="font-size:13px;" [(ngModel)]="reporterMNameNV" formControlName="reporterMNameNV">
<option value="0">Select</option>
<option value="1">MSK</option>
<option value="2">ASKU</option>
<option value="3">NASK</option>
<option value="4">UNK</option>
</select>
</div>
<div class='text-danger' *ngIf="newReporterform.controls.rptrmiddleName.controls.hasError('bothEmpty')">
Please enter information in one of the above fields.
</div>
</div>
</div>
</form>
请注意 - 我的验证器功能:
bothEmptyValidator: ValidatorFn = (fg: FormGroup) => {
const ValuesArray= Object.values(fg.controls)
let field1 = ValuesArray[0].value;
let field2 = ValuesArray[1].value;
field1 === null && field2 === null ? { bothEmpty: true } : null
}
我的验证器功能可以很好地获取表单组内的两个控件的值,例如 rptrfirstName/rptrmiddleName..etc,并且对于主表单的所有此类子表单组都可以正常工作..但是我被卡住了在显示错误“请在上述字段之一中输入信息。”,引发类似_co.newReporterform.controls.rptrfirstName.controls.hasError is not a function...
注意**这是一个常见错误,应在两个连续字段的底部显示。** 以下是字段组的示例显示:
有没有办法实现错误无需提及/进入表单组(两个字段)内的各个控件?(我的意思是,在表单组级别处理)
对此的任何帮助都非常感谢。 提前致谢 ASJ
-----更新------- 表单控件中的表单提交结果值“未定义”。因此验证器消息不会闪现到 UI。
【问题讨论】:
-
错误是关于formGroup,所以必须是
newReporterform.controls.rptrfirstName.hasError('bothEmpty')-remove the "controls" -
谢谢...控制台上的错误已解决...但是验证错误不会闪现到 UI...对象的值为“未定义”(图片附加到原始帖子),,,已尝试初始化为reporterFName: new FormControl('')...仍然无法正常工作...
-
你的代码有几个错误,我写一个回复希望对你有帮助
-
已合并推荐的代码更改...非常感谢....
标签: angular