2 angular angular-reactive-forms
我正在使用角反应形式,并且我的形式结构如下所示。
{
"name": '',
"params": {}
}
Run Code Online (Sandbox Code Playgroud)
我想在参数 formGroup 内添加动态属性(表单控件)。下面是我使用的代码,但它给出了空controls对象。
.ts 文件
exercise = {
data:[
{param: "Reps"},
{param: "Tempo"}
],
};
{
this.exerciseForm = this.formBuilder.group({
name: ['', [Validators.required],
params: this.formBuilder.group({})
});
}
get getAllParams(){
return this.exerciseForm.get('params') as FormGroup;
}
addNewParam(){
this.getAllParams[param] = this.formBuilder.control('');
}
Run Code Online (Sandbox Code Playgroud)
模板文件
<div formGroupName="params" *ngFor="let param of exercise.data;">
<input type="text" [formControlName]="param.param" />
</div>
Run Code Online (Sandbox Code Playgroud)
谁能帮我创建相同的结构吗?
//At first only "name" and a formGroup "params" empty
this.exerciseForm = this.formBuilder.group({
name: ["", [Validators.required]],
params: this.formBuilder.group({})
});
this.exercise.data.forEach(param => {
(this.exerciseForm.get("params") as FormGroup).addControl(
param.param,
new FormControl()
);
});
Run Code Online (Sandbox Code Playgroud)
参见堆栈闪电战
更新:.html 之类
<form [formGroup]="exerciseForm">
<input formControlName="name">
<div formGroupName="params">
<div *ngFor="let param of this.exercise.data">
<input [formControlName]="param.param">
</div>
</div>
</form>
<pre>
{{exerciseForm?.value|json }}
</pre>
Run Code Online (Sandbox Code Playgroud)
*更新2以避免错误我们可以在输入中添加*ngIf
<input *ngIf="exerciseForm.get('params.'+param.param)"
[formControlName]="param.param">
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用 keypipe 值循环控制
<form [formGroup]="exerciseForm2">
<input formControlName="name">
<div formGroupName="params">
<div *ngFor="let control of exerciseForm2.get('params').controls|keyvalue;let i=index">
<input [formControl]="control.value">
</div>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5352 次 |
| 最近记录: |