gpt4 book ai didi

Angular Material - MatTable 可扩展行动画

转载 作者:行者123 更新时间:2023-12-04 12:44:08 25 4
gpt4 key购买 nike

目前我已经构建了一个具有可扩展行的 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

然而,很明显,动画中断了。
我怎么解决这个问题?如果可能的话,我想保留动画。

最佳答案

使用进入/离开转换:

ts文件中的动画:

animations: [
trigger(
'detailExpand', [
transition(':enter', [
style({ height: '0px', minHeight: '0', display: 'none' }),
animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({ height: '*' }))
]),
transition(':leave', [
style({ height: '*' }),
animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({ height: '0px', minHeight: '0', display: 'none' }))
])
]
)
]

在模板中使用:

<my-inner-component *ngIf="myModel.isExpanded" [@detailExpand]>
...
</my-inner-component>

关于Angular Material - MatTable 可扩展行动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54131127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com