Мне нужно отобразить список в <table>, а также динамически добавить строку в форме Reactive

В HTML:

<form [formGroup]="myform">
<table>
<tr *ngFor="let item of items">
<td>
<input type="text" [(ngModel)]="item.name" formControlName="item.name"/>
</td>
</tr>
</table>
<button (click)="addRow()">ADD Row </button>
</form>

Изначально у меня есть одни данные, поэтому я связываю их в текстовом поле. Когда я нажимаю кнопку Добавить, мне нужно добавить пустую строку текстового поля.

В component.ts

ngOninit(){
this.myform= formBuilder.group([
item.name : new FormControl('',Validators.Required);
]);
}

Я понятия не имею, как использовать formArray в моем сценарии.

2 ответа

Попробуйте этот фрагмент

шаблон

<form [formGroup]="testForm">
 <div formArrayName="properties">
  <div *ngFor="let prop of testForm.get('properties').controls; let i = index" >
   <input type="text" class="form-control" [formControlName]="i">
  </div>
 </div>
</form>
<br>
<button (click)="addFormField()">Add Field</button>

Составная часть

import { FormBuilder, FormGroup, FormControl } from '@angular/forms';
export class App {
  name:string;
  testForm: FormGroup;

  ngOnInit() {
    this.testForm = this.fb.group({
      properties: this.fb.array([])
    });
  }

  constructor(private fb: FormBuilder) {  }

  addFormField() {
    <FormArray>this.testForm.get('properties').push(new FormControl());

  }

}

После понимания шагов кода попробуйте добавить это в таблицу.

Чтобы вывести данные в таблицу (Ваш HTML выглядит нормально)

HTML

<form [formGroup]="myform">
  <table>
    <tr *ngFor="let item of items">
      <td>
       <input type="text" [(ngModel)]="item.name" formControlName="item.name"/>
      </td>
   </tr>
</table>
<button (click)="addRow()">ADD Row </button>
</form>

Код TS

С помощью этого кода TS вы сможете добавить новую строку в таблицу, и контроль формы будет применен автоматически.

addRow(){
items.push({'name' : ''});
}
Другие вопросы по тегам