Прежде всего, в вашем mat-table
Я думаю, что вам требуется FormGroup с элементом управления FormArray, который имеет FormGroups (это элементы управления в строке таблицы).
Что-то вроде:
const group = new FormGroup( {
rows: new FormArray( [
new FormGroup( {
foo: new FormControl(1),
bar: new FormControl(1)
} ),
new FormGroup( {
foo: new FormControl(2),
bar: new FormControl(2)
})
])
} );
Конечно, вы можете создать функцию, которая создаст для вас структуру Row FormGroup.
<div [formGroup]="group" class="mat-elevation-z1" #tableWrapper>
<table mat-table [dataSource]="data" formArrayName="rows">
<ng-container matColumnDef="foo">
<th mat-header-cell *matHeaderCellDef>Foo</th>
<td mat-cell *matCellDef="let row; let i = index" [formGroupName]="i">
<mat-form-field class="input">
<input matInput formControlName="foo">
</mat-form-field>
</td>
</ng-container>
<ng-container matColumnDef="bar">
<th mat-header-cell *matHeaderCellDef>Bar</th>
<td mat-cell *matCellDef="let row; let i = index" [formGroupName]="i">
<mat-form-field class="input">
<input matInput formControlName="bar">
</mat-form-field>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayColumns; sticky: true"></tr>
<tr mat-row *matRowDef="let row; columns: displayColumns; let i = index"></tr>
</table>
Наконец вам нужно добавить свои данные:
const data = [
{ foo: 1, bar: 1 },
{ foo: 2, bar: 2 },
]
Если яправильно, данные, которые вы передаете в mat-table
, должны присутствовать в вашей структуре FormArray, поэтому вы должны пропатчить значения.Я думаю, что функция источника данных состоит в том, чтобы печатать значения в каждом mat-cell
, используя переменную row
.Однако, поскольку вы используете formControl, вы можете либо использовать [value]="row.foo"
in для установки значения, либо предварительно заполнить его при создании структуры формы.
Пример Google, который может помочь: https://stackblitz.com/edit/angular-riepzk-rp5jbf?file=app%2Ftable-basic-example.ts
Отказ от ответственности: я не проверял этот код, но он должен быть примерно правильным.Надеюсь, это поможет!