管理反应式表单值,该值是一个对象

时间:2018-10-22 15:25:55

标签: javascript html angular forms

我有一个从服务器获取的数组,其中包含这样的对象:

[
    {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形式的索引比较位置。在我看来,也许有更好的方法...

非常感谢!

2 个答案:

答案 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”