我正在使用反应形式以 Angular 6 构建表单,并且我正在为每个部分使用组件,但我遇到了一些问题:如何在子组件中使用 FormArray 并在父组件中使用方法。例如:
在父 ts 文件中:
constructor(private fb: FormBuilder,
private http: Http) { }
ngOnInit() {
this.parentForm = this.fb.group({
_server: this.fb.array([this.initItemRows()]),
})
}
initItemRows() {
return this.fb.group({
// DocumentID: uuid(),
HostName: [],
IPAddress: [],
Domain: [],
OS: []
});
}
get serverForms() {
return this.parentForm.get('_server') as FormArray
}
addServer() {
const server = this.fb.group({
// DocumentID: uuid(),
HostName: [],
IPAddress: [],
Domain: [],
OS: []
})
this.serverForms.push(server);
}
deleteServer(i) {
this.serverForms.removeAt(i)
}
在父 html 中我有:
<div formArrayName="_server">
<table id="_server" class="table table-striped table-bordered">
<thead>
<tr>
<th>Host name</th>
<th>IP</th>
<th>Domain</th>
<th>OS</th>
<th>action</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let server of serverForms.controls; let i=index" [formGroupName]="i">
<td>
<input formControlName="HostName" class="form-control" type="text" />
</td>
<td>
<input formControlName="IPAddress" class="form-control" type="text" />
</td>
<td>
<input formControlName="Domain" class="form-control" type="text" />
</td>
<td>
<input formControlName="OS" class="form-control" type="text" />
</td>
<td class="buttonCenter">
<button mat-raised-button color="primary" class="deleteFieldButton" (click)="deleteServer(i)" type="button">delete</button>
</td>
</tr>
</tbody>
<button mat-raised-button color="primary" class="addFieldButton" (click)="addServer()" type="button">insert row</button>
</table>
</div>
但我想使用父(上)的所有 html 代码在子组件中
<app-servers-section></app-servers-section>
我知道我可以在子组件中使用 FormGroupDirective,但是当我需要使用父方法时它不起作用。
请指教!谢谢!