【发布时间】:2021-12-25 00:27:02
【问题描述】:
在使用两种不同的方法验证相同的无线电输入元素时,即。模板驱动的表单和模型驱动的表单,我被这样的场景困住了formControlName,我得到了 3 个单独的实例。
<!-- template-driven-form.component.html -->
<div class="form-group gender">
<label for="gender">Select Gender:</label>
<div class="radio" *ngFor="let gender of genders">
<input type="radio" name="gender" [value]="gender" ngModel appFormControlValidation validationMsgId="gender" required />
<label>{{ gender }}</label>
</div>
</div>
<!-- model-driven-form.component.html -->
<div class="form-group gender">
<label for="gender">Select Gender:</label>
<div class="radio" *ngFor="let gender of genders">
<input type="radio" name="gender" [value]="gender" formControlName="gender" appFormControlValidation validationMsgId="gender" required />
<label>{{ gender }}</label>
</div>
</div>
// model-driven-form.component.ts
genders: string[] = ['Male', 'Female', 'Other'];
this.modelForm = new FormGroup({
gender: new FormControl(null, [Validators.required])
});
// template-driven-form.component.ts
genders: string[] = ['Male', 'Female', 'Other'];
// form-control-directive
(this.control as NgControl).statusChanges.subscribe(
// returns single instance for 3 radio elements -> template form
// returns 3 instance for 3 radio elements -> model form
);
从上面的 sn-p 开始,我对两种表单都使用相同的 HTML 结构,但实例数量有所不同。这里的问题是,当验证发生时,对于模板驱动的表单,我只收到一次错误消息(这是预期的场景),但对于模型驱动的表单,我会收到 3 次显示的错误消息!
我的问题是:
- 为什么
ngModel和formControlName为相同元素类型生成的实例数不同? - 需要进行哪些更改才能使
formControlName也返回单个实例?
工作Stackbliz版本
【问题讨论】:
标签: angular angular-reactive-forms angular-ngmodel form-control angular-template-form