【发布时间】:2020-11-06 13:40:46
【问题描述】:
我正在尝试构建一个允许我在其上执行多项任务的表;其中,我正在尝试实现在那里编辑记录信息的能力。
我的想法是像往常一样创建 mat-table,另外添加一个 expandable row 以显示一个小表单,其中包含我可以编辑的字段和一个用于保存更改和更新表的按钮。但是我不确定如何实际构建它,因为我不确定如何为表中的每一行构建反应式表单;我无法在组件 TypeScript 文件中声明它,例如:
rowForm = new FormGroup({
control1: new FormControl()
})
因为表中的每条记录都需要它。
<table mat-table matSort [dataSource]="dataSource" class="table table-borderless admin-users-table" multiTemplateDataRows>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header> NAME </th>
<td mat-cell *matCellDef="let user">
<a href="javascript:" [routerLink]="['/setup/users', user._id]">
{{ user.name }}
</a>
</td>
</ng-container>
<ng-container matColumnDef="email">
<th mat-header-cell *matHeaderCellDef mat-sort-header> EMAIL </th>
<td mat-cell *matCellDef="let user">
{{ user.email }}
</td>
</ng-container>
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef> USER ID </th>
<td mat-cell *matCellDef="let user">
{{ user._id }}
</td>
</ng-container>
<ng-container matColumnDef="org">
<th mat-header-cell *matHeaderCellDef mat-sort-header> ORGANIZATION </th>
<td mat-cell *matCellDef="let user">
{{ user.organization.name }}
</td>
</ng-container>
<!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->
<ng-container matColumnDef="expandedDetail">
<td mat-cell *matCellDef="let element" class="py-0" [attr.colspan]="columnsToDisplay.length">
<div class="user-element-detail"
[@detailExpand]="element == expandedElement ? 'expanded' : 'collapsed'">
<div class="user-element-diagram">
<div class="user-element-position"> {{element.position}} </div>
<div class="user-element-symbol"> {{element.symbol}} </div>
<div class="user-element-name"> {{element.name}} </div>
<div class="user-element-weight"> {{element.weight}} </div>
</div>
<div class="user-element-description">
{{element.description}}
<span class="user-element-description-attribution"> -- Wikipedia </span>
</div>
</div>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let element; columns: displayedColumns;"
class="user-element-row"
[class.user-expanded-row]="expandedElement === element"
(click)="expandedElement = expandedElement === element ? null : element">
</tr>
<tr mat-row *matRowDef="let row; columns: ['expandedDetail']"></tr>
</table>
关于我应该如何解决这个问题或者是否有更优化的方法来执行此类功能的任何想法?
【问题讨论】:
标签: javascript angular typescript angular-material mat-table