您正在使用反应形式。即使这些字段对用户隐藏,但这些字段在用户中仍然处于活动状态。因此,您只需使用以下代码禁用反应字段
form.get("fieldName").disable();
在反应形式中,您不需要输入标签中的“必需”。还要添加 formControlName,如下所示。
<input formControlName="inputFieldName" type="text">
所以html文件会像
<form [formGroup]="form" novalidate>
<select formControlName="loanType">
<option value="0">Car loan</option>
<option value="1">Student loan</option>
</select>
<div *ngIf="loanType === 0">
<input formControlName="inputField1" type="text">
</div>
<div *ngIf="loanType === 1">
<input formControlName="inputField2" type="text">
</div>
<button type="submit" [disabled]="!form.isValid">
</form>
我们将 formControlName 添加到 2 个输入字段,并在 ts 文件中声明。
this.form = this.formBuilder.group({
loanType: ["", [Validators.required]],
inputField1: ["", [Validators.required]],
inputField2: ["", [Validators.required]],
});
我们可以为 LoanType 字段创建值更改侦听器
this.form.get("loanType").valueChanges.subscribe((loanType) => {
this.form.get("inputField1").disable();
this.form.get("inputField2").disable();
if(loanType === 1) {
this.form.get("inputField1").enable();
} else if (loanType === 2) {
this.form.get("inputField2").disable();
}
});
因此,当贷款类型为 1 时,将启用 inputField1;当贷款类型为 2 时,将启用 inputField2。
当字段被隐藏时,此表单将有效,因为它已被禁用。