Я пытаюсь реализовать динамическую c таблицу строк, в которой все ячейки таблицы являются полями ввода. Есть некоторые предварительно загруженные данные, но я не могу добавить к загруженным данным в представлении. Однако строки добавления / удаления работают правильно. Я пробовал ngModel и value, но он не работает.
app.component. html:
<table>
<thead>
<button (click)="onAddRow()" *ngIf="addForm.get('rows')">add row</button>
</thead>
<tbody>
<tr *ngFor="let row of addForm.get('rows')?.controls;let index = index;">
<!-- NOT WORKING with ngModel
<td>name : <input [ngModel]="row.get('name')" [formControl]="row.get('name')"></td> -->
<!-- NOT WORKING with value attribute
<td>name : <input value="row.get('name')" [formControl]="row.get('name')">\</td> -->
<td>
name : <input [formControl]="row.get('name')">
</td>
<td>
description : <input [formControl]="row.get('description')">
</td>
<td>
qty : <input [formControl]="row.get('qty')">
</td>
<td>
<button (click)="onRemoveRow(index)">Remove</button>
</td>
</tr>
</tbody>
</table>
app.component.ts:
import { Component } from '@angular/core';
import { FormGroup, FormBuilder, Validators, FormControl, FormArray, NgForm } from '@angular/forms'
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
addForm: FormGroup;
rows: FormArray;
itemForm: FormGroup;
constructor(private fb: FormBuilder) {
this.addForm = this.fb.group({
items: [null, Validators.required],
items_value: ['no', Validators.required]
});
this.rows = this.fb.array([{
"name": "Test Item",
"description": "Dedsc",
"qty": "q23"
}]);
}
ngOnInit() {
this.addForm.get("items").valueChanges.subscribe(val => {
if (val === true) {
this.addForm.get("items_value").setValue("yes");
this.addForm.addControl('rows', this.rows);
}
if (val === false) {
this.addForm.get("items_value").setValue("no");
this.addForm.removeControl('rows');
}
});
}
onAddRow() {
this.rows.push(this.createItemFormGroup());
}
onRemoveRow(rowIndex:number){
this.rows.removeAt(rowIndex);
}
createItemFormGroup(): FormGroup {
return this.fb.group({
name: null,
description: null,
qty: null
});
}
}
Мой вывод:
Expected output:
Also putting one Пример Stackblitz для лучшей справки.