【问题标题】:Array of numbers in Reactive Forms, Angular 6?反应形式的数字数组,Angular 6?
【发布时间】:2018-12-11 11:56:38
【问题描述】:

我知道我们可以使用 FormArray 将对象数组添加到 FormGroup,如下所示:
https://alligator.io/angular/reactive-forms-formarray-dynamic-fields/

ngOnInit() {
  this.orderForm = this.formBuilder.group({
    customerName: '',
    email: '',
    items: this.formBuilder.array([ this.createItem() ])
  });
}

createItem(): FormGroup {
  return this.formBuilder.group({
    name: '',
    description: '',
    price: ''
  });
}

addItem(): void {
  this.items = this.orderForm.get('items') as FormArray;
  this.items.push(this.createItem());
}

<div formArrayName="items"
  *ngFor="let item of orderForm.get('items').controls; let i = index;">
  <div [formGroupName]="i">
    <input formControlName="name" placeholder="Item name">
    <input formControlName="description" placeholder="Item description">
    <input formControlName="price" placeholder="Item price">
  </div>

  Chosen name: {{ orderForm.controls.items.controls[i].controls.name.value }}
</div>

但我想要数字数组而不是对象。
我们如何在 Angular 6.* 中做到这一点?
我们如何在其中添加或删除数字项?

【问题讨论】:

    标签: angular angular6 angular-reactive-forms reactive-forms formarray


    【解决方案1】:

    您可以将任何表单控件而不是表单组传递给表单数组:

    new FormGroup({
      // ...
      items: new FormArray([new FormControl(123)]),
    });
    

    Angular 附带的可能控件:FormGroupFormArrayFormControl

    FormBuilder(我个人认为它已经过时,只是一种意见)只是为您创建这些对象。如果您想坚持下去,请尝试

    items: this.formBuilder.array([123])
    

    添加和删除项目:

    private addItem(value: number) {
        this.itemsFormArray.push(new FormControl(value));
    }
    private removeItem(value: number) {
        let index = this.itemsFormArray.controls.findIndex(control => { 
            return control.value == value;
        });
        this.itemsFormArray.removeAt(index);
    }
    private get itemsFormArray(): FormArray {
        return this.formGroup.get('items') as FormArray;
    };
    

    【讨论】:

    • 谢谢,如何向items添加或删除号码
    • const formArray = (&lt;FormArray&gt;this.orderForm.get('items')); 然后formArray.push(new FormControl(123))。见angular.io/api/forms/FormArray
    • 以及如何删除?我们如何在 FormArray 中找到一个项目的索引?
    • RTFM 人。不要偷懒,你有链接。我不是个人程序员 :)
    猜你喜欢
    • 2019-02-18
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 2019-01-06
    相关资源
    最近更新 更多