【发布时间】:2020-01-28 09:28:29
【问题描述】:
我有一个mat-table,由 3 个不同角色的用户查看。
该表有多个列;其中一列是active(控制帐户激活和停用的布尔值)。我想在同一个表中(在另一列中)使用开关切换该值,但前提是用户是管理员。
我已经通过这种方式使用引导表实现了这一点:
<table class="table table-striped">
<thead>
<tr>
<th *ngIf="isAdmin(currentUser)" (click)="sortByAccountStatus()">
<a>Deactivate/Activate</a>
<a class="sort-by"></a>
</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let chartOfAccounts of accountList.reverse();" [hidden]="currentUser.role !== '1'">
<td [hidden]="!chartOfAccounts.accountActive">
<a (click)="deactivateAccount(chartOfAccounts)" class="text-danger">Deactivate</a>
</td>
<td [hidden]="chartOfAccounts.accountActive">
<a (click)="activateAccount(chartOfAccounts)" class="text-danger">Activate</a>
</td>
</tr>
</tbody>
<tbody>
<tr *ngFor="let chartOfAccounts of accountList" [hidden]="currentUser.role === '1'">
<td>{{accountActiveStatus(chartOfAccounts.accountActive)}}</td>
</tr>
</tbody>
</table>
上面的代码将在表格中添加一列,管理员可以在其中根据布尔值单击激活或停用。操作在组件中实现。
使用mat-table,我得到了布尔值active 列。
<ng-container matColumnDef="accountActive">
<mat-header-cell *matHeaderCellDef mat-sort-header>Active</mat-header-cell>
<mat-cell *matCellDef="let chartOfAccounts"> {{chartOfAccounts.accountActive}} </mat-cell>
</ng-container>
我的目标是创建另一个列来保存从true 到false 的切换,就像这样
<ng-container matColumnDef="activation">
<mat-header-cell *matHeaderCellDef mat-sort-header>Activate/Deactivate</mat-header-cell>
<mat-cell *matCellDef="let chartOfAccounts" [hidden]="!chartOfAccounts.accountActive">
<a (click)="deactivateAccount(chartOfAccounts)" class="text-danger">Deactivate</a>
</mat-cell>
<mat-cell *matCellDef="let chartOfAccounts" [hidden]="chartOfAccounts.accountActive">
<a (click)="activateAccount(chartOfAccounts)" class="text-danger">Deactivate</a>
</mat-cell>
</ng-container>
这不起作用并产生一个奇怪的结果,当切换开关关闭时,它无法再次打开,链接消失,切换列也消失。这是截图。
只要切换到false,布尔值就会被推送到表格的右侧
更新:
这是一个stackblitz 示例。切换不起作用,但基本上当您单击切换时,活动的值应在 true 和 false 之间切换,具体取决于切换是打开还是关闭。
【问题讨论】:
-
你能创建一个同样的堆栈闪电战吗?
-
屏幕截图似乎与您的代码不一致。您的代码显示标题的名称是
Activate/Deactivate而屏幕截图显示toggle -
如果您不想显示列,您只需更改数组
displayedColumns- 您在标签<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>和<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>中使用的变量 -
@Eliseo 谢谢 eliseo 我虽然我可以在 mat-cell 上使用 [hidden],但你的回答完全有道理,试过了,它可以工作
标签: angular typescript angular-material mat-table