html - 如何与验证一起动态循环表单控件名称
问题描述
我想在选择字段中验证动态 formControlName="xxx" 的多重循环
我的html代码
<ul *ngFor="let detaillist of stressli.stresstabdetails;">
<li>
<div class="form-container">
<select [(ngModel)]="detaillist.stressname" class="form-control" formControlName="spotstressname {{q + 1 }}">
<option [ngValue]="undefined" selected>Select an option</option>
<option *ngFor="let item of stressdata;" [ngValue]="item">{{item}}</option>
</select>
</div>
</li>
</ul>
TS 文件验证:
this.CaseDetailsForm = this.formBuilder.group({
spotstressname1:['', Validators.required],
spotstressname2:['', Validators.required],
});
在 .ts 文件中,我硬编码了 spotstressname1、spotstressname2 等。我需要动态地作为输出而不是硬编码值。我怎样才能得到那个?
解决方案
首先...不要将 ngModel 与响应式表单一起使用,您需要决定是否要使用 ngModel 或响应式表单,而不是两者都使用!
在这个示例中,我们完全反应。那么如何动态创建表单控件......我会这样做:
constructor(private fb: FormBuilder) {
this.CaseDetailsForm = this.fb.group({});
}
ngOnInit() {
// add dynamic form controls named 'spotstressname' and index
this.stressli.stresstabdetails.map((x, i) => {
this.CaseDetailsForm.addControl('spotstressname'+i, this.fb.control(x.stressname))
})
}
然后在模板中我们可以使用keyvalue
管道来迭代模板中表单的表单控件:
<div *ngFor="let ctrl of CaseDetailsForm.controls | keyvalue">
<select [formControlName]="ctrl.key">
<option value="">Select an option</option>
<option *ngFor="let item of stressdata;" [value]="item">{{item}}</option>
</select>
</div>
推荐阅读
- r - 根据 R 中的列值添加新行
- javascript - Postgres DatabaseError [SequelizeDatabaseError]:“IN”处或附近的语法错误
- c# - 如何将我的项目列表序列化为始终相同的 xml 字段名称,并将具有不同名称的 xml 列表反序列化为始终相同的类型?
- java - 在电子邮件附件中,任何类型的文档文件都使用文件扩展名而不是 coreect 扩展名发送
- vim - 是否可以在 vim 中使用 Control-p 和 Control-n 滚动多行自动完成?
- android - RecyclerView 在某个位置改变ImageView
- php - Express Checkout Paypal Payment Gateway For Woocommerce 存在 Polylang 问题
- java - ImageView 没有保持响应
- angular - 如何对组件进行单元测试以获取 ActivatedRoute paramMap 值并隐藏或显示 div
- android - Stripe 集成的这种解决方法是否正确