我有一个从服务器获取的数组,其中包含这样的对象:
[
{LanguageName: 'English', ID : 2},
{LanguageName: 'Dutch', ID : 1},
{LanguageName: 'portuguese', ID: 3},
]
我正在通过创建一个Form-Array来处理这个问题。
我的问题: 我希望如果用户更改此输入,它将仅更改Name的属性,例如:anyFormName.controls.value.LanguageName,而不是将整个值全部替换为字符串,因此最终会得到:< / p>
anyFormName.controls.value = "User's Input"
,我会得到:
anyFormName.controls.value = {LanguageName: "User's Input", ID : 2}
在将setValue()应用于特定控件之前,我已经解决了这个问题,并将数据保存在另一个数组中,以便可以通过Array形式的索引比较位置。在我看来,也许有更好的方法...
非常感谢!
答案 0 :(得分:0)
只要我对您的理解正确,您就在尝试更改表单控件名称而不是其值。可以通过这种方法完成:
changeFormFieldName(oldField: string, newField: string): void {
var newControls: {[key: string]: FormControl} = {};
Object.keys(this.form.controls).map((field: string) => {
if (field==oldField) {
newControls[newField] = this.form.controls[field];
} else {
newControls[field] = this.form.controls[field];
}
});
this.form = new FormGroup(newControls);
}
假设您的表单组对象位于this.form
下。
答案 1 :(得分:0)
塔尔,通常您会得到一个像这样的formArray
copy
//或
<div *ngIf="myFormArray" [formGroup]="myFormArray">
<div *ngFor="let item of myFormArray.controls; let i=index" [formGroupName]="i">
<input formControlName="ID">
<input formControlName="LanguageName">
</div>
</div>
{{myFormArray?.value|json}}
喜欢的地方
<div *ngIf="myForm" [formGroup]="myForm">
<div formArrayName="data">
<div *ngFor="let item of myForm.get('data').controls; let i=index" [formGroupName]="i">
<input formControlName="ID">
<input formControlName="LanguageName">
</div>
</div>
</div>
{{myForm?.value|json}}
仅不包括输入formControlName =“ ID”