Angular 10 table with selection - 选中时显示扩展行
Angular10 table with selection - show expanded row when checked
我正在使用 angular 10 table 进行选择,但想在选择该行时显示可展开的行。我试过使用可扩展 tables 和选择 table 但它没有用。
我在下面添加了我的 html 代码,但该行在页面上始终可见。我只希望它在选中该行时可见。
<table mat-table [dataSource]="dataSource" multiTemplateDataRows>
<!-- Checkbox Column -->
<ng-container matColumnDef="select">
<th mat-header-cell *matHeaderCellDef>
<mat-checkbox
(change)="$event ? masterToggle() : null"
[checked]="selection.hasValue() && isAllSelected()"
[indeterminate]="selection.hasValue() && !isAllSelected()"
[aria-label]="checkboxLabel()"
>
</mat-checkbox>
</th>
<td mat-cell *matCellDef="let row">
<mat-checkbox
(click)="$event.stopPropagation()"
(change)="$event ? selection.toggle(row) : null"
[checked]="selection.isSelected(row)"
[aria-label]="checkboxLabel(row)"
>
</mat-checkbox>
</td>
</ng-container>
<!-- Position Column -->
<ng-container matColumnDef="position">
<th mat-header-cell *matHeaderCellDef>No.</th>
<td mat-cell *matCellDef="let element">{{element.position}}</td>
</ng-container>
<!-- Name Column -->
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef>Name</th>
<td mat-cell *matCellDef="let element">{{element.name}}</td>
</ng-container>
<!-- Weight Column -->
<ng-container matColumnDef="weight">
<th mat-header-cell *matHeaderCellDef>Weight</th>
<td mat-cell *matCellDef="let element">{{element.weight}}</td>
</ng-container>
<!-- Symbol Column -->
<ng-container matColumnDef="symbol">
<th mat-header-cell *matHeaderCellDef>Symbol</th>
<td mat-cell *matCellDef="let element">{{element.symbol}}</td>
</ng-container>
<ng-container matColumnDef="expandedDetail">
<td
mat-cell
*matCellDef="let element"
[attr.colspan]="displayedColumns.length"
>
Show when checked
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr
mat-row
*matRowDef="let row; columns: displayedColumns;"
(click)="selection.toggle(row)"
></tr>
<tr mat-row *matRowDef="let row; columns: ['expandedDetail']"></tr>
</table>
谢谢
您需要根据您的选择状态show/hide第二个模板行。
回头看看material的例子,你会注意到他们使用CSS将扩展行高度设置为0,然后将扩展行的溢出和显示更改为flex。
这是一个不同但更快速的示例,它将展开的行包装在一个 ng-if 中,它检查您的复选框使用的相同选择机制。我没有运行这个,这是一个例子。您可以将 ng-if 切换为切换显示:none 或可见性,但要了解使用这些方法会影响 table 渲染所需的时间。
<ng-container matColumnDef="expandedDetail">
<td
mat-cell
*matCellDef="let row"
[attr.colspan]="displayedColumns.length"
>
<ng-container *ngIf="selection.isSelected(row)">
Show when checked
</ng-container>
</td>
我正在使用 angular 10 table 进行选择,但想在选择该行时显示可展开的行。我试过使用可扩展 tables 和选择 table 但它没有用。
我在下面添加了我的 html 代码,但该行在页面上始终可见。我只希望它在选中该行时可见。
<table mat-table [dataSource]="dataSource" multiTemplateDataRows>
<!-- Checkbox Column -->
<ng-container matColumnDef="select">
<th mat-header-cell *matHeaderCellDef>
<mat-checkbox
(change)="$event ? masterToggle() : null"
[checked]="selection.hasValue() && isAllSelected()"
[indeterminate]="selection.hasValue() && !isAllSelected()"
[aria-label]="checkboxLabel()"
>
</mat-checkbox>
</th>
<td mat-cell *matCellDef="let row">
<mat-checkbox
(click)="$event.stopPropagation()"
(change)="$event ? selection.toggle(row) : null"
[checked]="selection.isSelected(row)"
[aria-label]="checkboxLabel(row)"
>
</mat-checkbox>
</td>
</ng-container>
<!-- Position Column -->
<ng-container matColumnDef="position">
<th mat-header-cell *matHeaderCellDef>No.</th>
<td mat-cell *matCellDef="let element">{{element.position}}</td>
</ng-container>
<!-- Name Column -->
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef>Name</th>
<td mat-cell *matCellDef="let element">{{element.name}}</td>
</ng-container>
<!-- Weight Column -->
<ng-container matColumnDef="weight">
<th mat-header-cell *matHeaderCellDef>Weight</th>
<td mat-cell *matCellDef="let element">{{element.weight}}</td>
</ng-container>
<!-- Symbol Column -->
<ng-container matColumnDef="symbol">
<th mat-header-cell *matHeaderCellDef>Symbol</th>
<td mat-cell *matCellDef="let element">{{element.symbol}}</td>
</ng-container>
<ng-container matColumnDef="expandedDetail">
<td
mat-cell
*matCellDef="let element"
[attr.colspan]="displayedColumns.length"
>
Show when checked
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr
mat-row
*matRowDef="let row; columns: displayedColumns;"
(click)="selection.toggle(row)"
></tr>
<tr mat-row *matRowDef="let row; columns: ['expandedDetail']"></tr>
</table>
谢谢
您需要根据您的选择状态show/hide第二个模板行。
回头看看material的例子,你会注意到他们使用CSS将扩展行高度设置为0,然后将扩展行的溢出和显示更改为flex。
这是一个不同但更快速的示例,它将展开的行包装在一个 ng-if 中,它检查您的复选框使用的相同选择机制。我没有运行这个,这是一个例子。您可以将 ng-if 切换为切换显示:none 或可见性,但要了解使用这些方法会影响 table 渲染所需的时间。
<ng-container matColumnDef="expandedDetail">
<td
mat-cell
*matCellDef="let row"
[attr.colspan]="displayedColumns.length"
>
<ng-container *ngIf="selection.isSelected(row)">
Show when checked
</ng-container>
</td>