【发布时间】:2017-06-17 11:12:24
【问题描述】:
我有一个银行贷款申请,其中包含很多输入字段,其中一些是隐藏的(隐藏字段根据一组条件动态显示)。例如,如果您选择选项 1,则会显示一个隐藏字段,并隐藏其他一些字段。如果您选择选项 2,某些字段会显示,其他字段会隐藏。在表单的末尾我有一个这意味着按钮将被禁用,直到整个表单有效,但我现在的问题是隐藏字段也得到验证,因此表单永远不会有效。有没有办法告诉 Angular 不验证字段是否隐藏?
我隐藏字段的方式如下例所示:
<form [formGroup]="form">
<select formControlName="loanType">
<option value="0">Car loan</option>
<option value="1">Student loan</option>
</select>
<div *ngIf="loanType === 0">
<input type="text" required>
</div>
<div *ngIf="loanType === 1">
<input type="text" required>
</div>
<button type="submit" [disabled]="!form.isValid">
</form>
【问题讨论】:
-
您使用哪种表单语法:模板驱动表单还是模型驱动表单?对于模型驱动的表单,我想说在模板中隐藏字段是不够的,您还必须更新模型(在组件类中)。您可以使用AbstractControl.clearValidators() 之类的方法以编程方式清除特定字段的验证器。
-
(旁注:你不只是用
*ngIf“隐藏”这些字段,你实际上是从DOM中删除它们。) -
看看这个博客:scotch.io/tutorials/…
-
@AngularFrance 他用
*ngIf删除它,是的,所以它不应该以任何方式影响表单!如果是这样就很奇怪。有趣的是,在 Angular 1 中,一个表单是正确的.$valid,即使带有ng-show="false"的required输入是空的。 -
@Blauhirn 这是 Angular 2 的响应式表单的记录行为,是预期的,请参阅 Kara 对此问题的回复:github.com/angular/angular/issues/7970
标签: javascript forms validation angular