该问题的解决方案是使用自定义控件,并在模板中使用该控件。使用这种方法可以避免表单数组嵌套在mat表格中引起的问题,而又能够保持mat表格的样式。
示例代码如下:
在组件的ts文件中,定义一个自定义控件:
import { Component, Input } from '@angular/core'; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
@Component({ selector: 'app-nested-form', templateUrl: './nested-form.component.html', styleUrls: ['./nested-form.component.css'], providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: NestedFormComponent, multi: true } ] }) export class NestedFormComponent implements ControlValueAccessor { @Input() formGroup: FormGroup; @Input() formControlName: string;
// ControlValueAccessor methods registerOnChange(fn: any): void {} registerOnTouched(fn: any): void {} writeValue(obj: any): void {} }
在模板文件中,使用自定义控件替代mat表格:
...
在自定义控件的HTML模板中,展示原本要在mat表格中展示的数据:
注意:这里需要使用formArrayName指令将表单数组绑定到mat表格上。
这样一来,就可以使用自定义控件来代替mat表格,避免了嵌套表单数组和mat表格之间的冲突。