У меня есть FormArray с элементами списка под ним. Я хочу создать кнопку для удаления элемента под ArrayForm. Когда я нажимаю кнопку, она очищает значение формы, но не удаляет элемент из внешнего интерфейса. Не уверен, где я скучаю.
app.component.ts
export class AppComponent {
name = 'Angular2+ Reactive Form';
testForm: FormGroup;
classGridDisplayedColumns = [
"radioButtons"
];
data = {
radioButtons: [
{radio: 'Y'},
{radio: 'N'},
{radio: 'N'}
]
};
constructor(private readonly fb: FormBuilder){
this.testForm = this.fb.group({
radioButtons: this.fb.array(
this.data.radioButtons.map(radioButton => this.generateRadioButtons(radioButton))
)
});
}
private generateRadioButtons(radioButton) {
return this.fb.group({
radio: [ radioButton.radio, Validators.required ],
})
}
deleteRow(index) {
console.log('Delete row...');
(<FormArray>this.testForm.controls.radioButtons).removeAt(index);
}
onSubmit() {
console.log(this.testForm);
}
}
app.component.html
<code><form name="testForm" [formGroup]="testForm" (ngSubmit)="onSubmit()" novalidate>
<div formArrayName="radioButtons">
<table mat-table [dataSource]="testForm.controls['radioButtons'].controls">
<ng-container matColumnDef="radioButtons">
<th mat-header-cell *matHeaderCellDef class="radio">Radio Buttons</th>
<td mat-cell *matCellDef="let element; let i = index;" [formGroupName]="i" class="radio">
<mat-radio-group name="radio-{{i}}" formControlName="radio" required disableOptionCentering>
<mat-radio-button value="Y">Yes</mat-radio-button>
<mat-radio-button value="N">No</mat-radio-button>
</mat-radio-group>
<button type="button" (click)="deleteRow(i)">Delelet Row</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="classGridDisplayedColumns; sticky: true"></tr>
<tr mat-row *matRowDef="let row; columns: classGridDisplayedColumns;"></tr>
</table>
</div>
<pre>{{ testForm.value | json }}
Вы можете найти демо здесь: https://stackblitz.com/edit/angular2-reactive-form-table