【问题标题】:Angular formarray push formcontrol角formarray推送formcontrol
【发布时间】:2019-12-11 04:49:33
【问题描述】:

在我的表单中我需要添加公司,我想在数据库中保存我添加的公司的字符串列表,问题是formarray中公司的值始终为空

<button (click)="addNewCompany()">Add new Company</button><br><br>
<form [formGroup]="myForm">
    <div formArrayName="companies">
        <div *ngFor="let comp of getForm(); let i=index>
            <fieldset>
                <legend>
                    <h3>COMPANY {{i+1}}: </h3>
                </legend>
                <label>Company Name: </label>
                <input formControlName="comp" /><span><button (click)="deleteCompany(i)">Delete Company</button></span>
            </fieldset>
        </div>
    </div><br>
  </form>


export class AppComponent {
  myForm: FormGroup;

  constructor(private fb: FormBuilder) {
    this.myForm = this.fb.group({
      companies: this.fb.array([])
    });
  }

  getForm(): any {
    return this.myForm.get("companies")["controls"];
  }

  addNewCompany() {
    const control = <FormArray>this.myForm.get("companies");
    control.push(this.fb.control(''));
  }

  deleteCompany(index) {
    let control = <FormArray>this.myForm.controls.companies;
    control.removeAt(index);
  }

}

Stackblitz

【问题讨论】:

  • 嗨。您应该将一些相关代码与 StackBlitz 链接一起发布 - 您更有可能以这种方式获得答案????

标签: angular typescript


【解决方案1】:

你也添加了 StackBlitz 演示真的很方便!

&lt;input [formControlName]="i" /&gt;

由于FormArray 的项目将具有索引的0, 1, 2...,因此这些成为formControlName 值。您还需要使用[] 表示法,否则它使用i 作为字符串,而不是使用i 的属性值,例如0, 1

【讨论】:

  • [formControlName]="i" 和 formControlName="i" 有什么区别
  • 我添加了一些关于此的更多信息。每当您想使用属性时,都必须使用括号。我通常使用括号,但如果你这样做,请注意字符串必须用引号括起来 [value]="'some text'"
  • 当你使用小括号时,Angular 会评估引号之间的内容,所以 [formControlName]="i", angular 会将 "i" 评估为 0,1,2..,如果你写 formControlName=" i" Angular 在您的 formControl 中查找名称为 "i" 的控件
猜你喜欢
  • 1970-01-01
  • 2020-02-26
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多