В настоящее время я построил MatTable
с расширяемыми строками:
<!-- Hidden cell -->
<ng-container matColumnDef="expandedDetail">
<td mat-cell *matCellDef="let myModel" [attr.colspan]="displayedColumns.length">
<div
class="detail-cell"
[@detailExpand]="myModel.isExpanded ? 'expanded' : 'collapsed'"
>
<my-inner-component
...
></my-inner-component>
</div>
</td>
</ng-container>
И строка:
<!-- Hidden row -->
<tr
mat-row
*matRowDef="let myModel; columns: ['expandedDetail']"
></tr>
К расширяемой строке прикреплена анимация:
animations: [
trigger('detailExpand', [
state('collapsed, void', style({ height: '0px', minHeight: '0', display: 'none' })),
state('expanded', style({ height: '*' })),
transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)'))
])
]
Поскольку я отображаю много строк, а my-inner-component
является тяжелым компонентом, я хочу, чтобы он создавался только при расширении строки.
Итак, я добавил:
*ngIf="myModel.isExpanded"
к содержанию div
.
Однако анимация, очевидно, обрывается.
Как я могу решить эту проблему? Я хотел бы сохранить анимацию, если это возможно.