Angular 的 form builder 蠻強大的,two way binding data 以及 validator 相當好用,其中有一個特性 FormArray
可以做許多運用,來做一個動態產生表單欄位的範例。
ts
import { Component, OnInit } from '@angular/core';
import { FormArray, FormBuilder, FormGroup } from '@angular/forms';
@Component({
selector: 'app-dy-demo',
templateUrl: './dy-demo.component.html',
styleUrls: ['./dy-demo.component.scss']
})
export class DyDemoComponent implements OnInit {
public form = this.fb.group({
username: 'chan',
family: this.fb.array([])
})
constructor(
private fb: FormBuilder
) { }
ngOnInit(): void {
}
public newLine(): FormGroup {
return this.fb.group({
name: '',
age: ''
})
}
public family(): FormArray {
return this.form.get('family') as FormArray;
}
public add(): void {
return this.family().push(this.newLine());
}
public remove(i: number): void {
this.family().removeAt(i);
}
}
html
<h3>{{ form.value | json }}</h3>
<div>
<button (click)="add()">add</button>
</div>
<form action="" [formGroup]="form">
<div>
<input type="text" formControlName="username">
</div>
<div formArrayName="family">
<ng-container *ngFor="let f of family().controls; let i=index" [formGroupName]="i">
<div>
username: <input type="text" formControlName="name"> age: <input type="number" formControlName="age">
<button (click)="remove(i)">remove</button>
</div>
</ng-container>
</div>
</form>
目前覺得 Angular 的內容真是易學難精啊。
沒有留言:
張貼留言