在使用两种不同的方法验证相同的无线电输入元素时,即。模板驱动表单和模型驱动表单,我被这样的场景ngModel
困住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
);
从上面的代码片段来看,我对两种表单都使用了相同的 HTML 结构,但实例数量有所不同。这里的问题是,当验证发生时,对于模板驱动的表单,我只收到一次错误消息(这是预期的情况),但对于模型驱动的表单,我收到错误消息显示 3 次!
我的问题是:
- 为什么为相同的元素类型生成的实例数量与
ngModel
和不同formControlName
? - 需要进行哪些更改才能
formControlName
返回单个实例?
工作Stackbliz版本