forms - change - page title angular 4
Angular 4 FormArray de formularios Agregue un botón para agregar o eliminar una fila de entrada de formulario (1)
Estoy creando una aplicación usando Angular 4.0.2. ¿Cómo puedo agregar un botón a un formulario para agregar una nueva fila de entrada y un botón para eliminar una fila en particular? Quiero decir que quiero una forma como esta. Quiero que mi forma se vea más o menos así:
.
Aquí está mi código:
add-invoice.component.html
<h3 class="page-header">Add Invoice</h3>
<form [formGroup]="invoiceForm">
<div formArrayName="itemRows">
<div *ngFor="let itemrow of itemRows.controls; let i=index" [formGroupName]="i">
<h4>Invoice Row #{{ i + 1 }}</h4>
<div class="form-group">
<label>Item Name</label>
<input formControlName="itemname" class="form-control">
</div>
<div class="form-group">
<label>Quantity</label>
<input formControlName="itemqty" class="form-control">
</div>
<div class="form-group">
<label>Unit Cost</label>
<input formControlName="itemrate" class="form-control">
</div>
<div class="form-group">
<label>Tax</label>
<input formControlName="itemtax" class="form-control">
</div>
<div class="form-group">
<label>Amount</label>
<input formControlName="amount" class="form-control">
</div>
<button *ngIf="i > 1" (click)="deleteRow(i)" class="btn btn-danger">Delete Button</button>
</div>
</div>
<button type="button" (click)="addNewRow()" class="btn btn-primary">Add new Row</button>
</form>
<p>{{invoiceForm.value | json}}</p>
Aquí está mi código para add-invoice.component.ts
import { Component, OnInit } from ''@angular/core'';
import { FormBuilder, FormControl, FormArray, FormGroup } from ''@angular/forms'';
@Component({
selector: ''app-add-invoice'',
templateUrl: ''./add-invoice.component.html'',
styleUrls: [''./add-invoice.component.css'']
})
export class AddInvoiceComponent implements OnInit {
invoiceForm: FormGroup;
constructor(
private _fb: FormBuilder
) {
this.createForm();
}
createForm(){
this.invoiceForm = this._fb.group({
itemRows: this._fb.array([])
});
this.invoiceForm.setControl(''itemRows'', this._fb.array([]));
}
get itemRows(): FormArray {
return this.invoiceForm.get(''itemRows'') as FormArray;
}
addNewRow(){
this.itemRows.push(this._fb.group(itemrow));
}
ngOnInit(){
}
}
Aquí hay una versión abreviada de su código:
Cuando inicia su formulario, puede agregar un grupo de formularios vacío dentro de su matriz de formularios:
ngOnInit() {
this.invoiceForm = this._fb.group({
itemRows: this._fb.array([this.initItemRows()])
});
}
get formArr() {
return this.invoiceForm.get(''itemRows'') as FormArray;
}
Entonces la función:
initItemRows() {
return this._fb.group({
// list all your form controls here, which belongs to your form array
itemname: ['''']
});
}
Aquí están las funciones
addNewRow
y
deleteRow
:
addNewRow() {
this.formArr.push(this.initItemRows());
}
deleteRow(index: number) {
this.formArr.removeAt(index);
}
Su formulario debería verse así:
<form [formGroup]="invoiceForm">
<div formArrayName="itemRows">
<div *ngFor="let itemrow of formArr.controls; let i=index" [formGroupName]="i">
<h4>Invoice Row #{{ i + 1 }}</h4>
<div>
<label>Item Name</label>
<input formControlName="itemname">
</div>
<button type="button" (click)="deleteRow(i)" *ngIf="formArr.controls.length > 1" >
Delete
</button>
</div>
</div>
<button type="button" (click)="addNewRow()">Add new Row</button>
</form>
Aquí está un