Массив чисел в реактивных формах, угловой 6? - PullRequest
0 голосов
/ 03 июля 2018

Я знаю, что мы можем добавить массив объектов к FormGroup с помощью FormArray следующим образом:
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. *?
Как мы можем добавить или удалить номер элемента из него?

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете передать любой элемент формы вместо группы форм в массив форм:

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

Возможные элементы управления, которые поставляются с угловым: FormGroup, FormArray, FormControl.

FormBuilder (который я лично считаю устаревшим, просто мнение) просто создает эти объекты для вас. Если вы хотите придерживаться этого, попробуйте

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

Добавить и удалить Item:

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;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...