【发布时间】:2021-11-08 00:23:09
【问题描述】:
我有一个对象数组:
arr = [{
"name": "firstName",
"type": "text",
"required": false
},
{
"name": "lastName",
"type": "text",
"required": false
},
{
"name": "dob",
"type": "date",
"required": false
}
]
我正在使用 *ngFor 和 formControlName 在 HTML 中创建一个表单,如下所示:
createFormgroup() {
arr.forEach((control: any) => {
this.createFormGroup.addControl(
control.name,
this.fb.control(false)
);
this.createFormGroup.addControl(
"required" + i,
this.fb.control(false)
);
});
}
submit(form: NgForm) {
console.log(form.value)
}
<mat-label>Enter form name:</mat-label>
<input class="form-name-input" matInput placeholder="Form Name" formControlName="formName" required>
<form [formGroup]="createFormGroup" (ngSubmit)="submit(createFormGroup)">
<div *ngFor="let a of arr; let i = index">
<mat-checkbox formControlName="{{a.name}}">{{ a.name }}</mat-checkbox>
<mat-checkbox formControlName="required{{i}}">required</mat-checkbox>
</div>
<button type="submit">submit</button>
</form>
在这里,我试图实现将值显示和发布为一个相对于另一个的对象。例如,如果我检查 HTML 中的名字、dob 和所需的,当单击 submit() 时,我想要整个对象。 点击 submit() 时,我正在寻找如下输出:
form.value = [{
"name": "firstname",
"type": "text",
required: true
}, {
"name": "dob",
"type": "date",
required: false
}]
我对如何实现这一点感到困惑。有办法吗?此外,我需要为每个必填字段分配不同的 formControl 名称。我不知道该怎么做。
我附上一张图片以供理解。 UI image
注意:我知道如何从表单中获取值,但我正在寻找一种方法来复制整个对象
为简单起见:我需要用于创建表单的相同数组,最后我需要根据用户输入更改相同对象属性的相同数组
【问题讨论】:
-
对于必填字段的formControlName,我知道我可以对所有内容使用索引。但是,有没有其他不使用索引的方法呢?
-
你试过
createFormGroup.value吗? -
@AmerYousuf 是的,它将表单对象返回为 { "firstName": true, "lastName": false, "dateOfBirth": false, required0: true }。我需要它作为一个对象,并将相应的属性添加到同一个对象。
-
所以您需要与创建表单时相同的数组吗?
-
@NavnathJadhav 太好了。这就是我要找的。我想我没有使用简单的词就把它复杂化了。
标签: javascript arrays angular typescript reactive-forms