You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ngx-datatable的行添加动画效果?

给ngx-datatable的行添加堆叠动画的解决方案

直接在<ngx-datatable>标签上加动画只会作用于整个表格容器(表头、表尾属于容器的一部分),要让动画作用于每一行,你需要自定义行模板,把动画绑定到行元素上。

步骤1:定义行动画

在组件的@Component装饰器中定义堆叠动画,比如实现行从透明到渐显、高度展开的效果:

import { trigger, transition, style, animate } from '@angular/animations';

@Component({
  // ...其他组件配置
  animations: [
    trigger('datatableRowAnimation', [
      transition(':enter', [
        style({ opacity: 0, height: 0 }),
        animate('300ms ease-out', style({ opacity: 1, height: '*' }))
      ]),
      transition(':leave', [
        animate('200ms ease-in', style({ opacity: 0, height: 0 }))
      ])
    ])
  ]
})

步骤2:自定义行模板并绑定动画

在你的模板中,添加<ngx-datatable-row-template>覆盖默认行渲染,把动画触发器加到行的根容器上:

<ngx-datatable
        #table
        [rows]="rows" 
        [columns]="columns" 
        class="bootstrap"
        [columnMode]="ColumnMode.force" 
        [footerHeight]="50" 
        rowHeight="auto"
        [count]="totalItems"
        [externalPaging]="true"
        [externalSorting]="true"
        [limit]="nbItemPerPage"
        [messages]="{emptyMessage: emptyMessage}"
        [sorts]="[{prop: 'SendAt', dir: 'desc'}]"
        (sort)="onSort($event)"
        > 
  <!-- 自定义行模板 -->
  <ngx-datatable-row-template let-row="row" let-rowIndex="rowIndex">
    <div [@datatableRowAnimation] class="datatable-row">
      <ngx-datatable-row-cell *ngFor="let column of columns; let i = index"
                              [row]="row"
                              [column]="column"
                              [rowIndex]="rowIndex"
                              [columnIndex]="i">
      </ngx-datatable-row-cell>
    </div>
  </ngx-datatable-row-template>

  <!-- 你的列定义 -->
  <ngx-datatable-column name="Date" prop="SendAt" [maxWidth]="200">
      <ng-template let-column="column" ngx-datatable-header-template>{{ column.name }}</ng-template>
      <ng-template let-row="row" ngx-datatable-cell-template>
          {{ row.SendAt }}
      </ng-template>
  </ngx-datatable-column>
  <!-- ...其他列 -->
</ngx-datatable>

进阶:实现行依次动画

如果需要让行按顺序逐个显示(而非同时触发),可以通过行索引添加动画延迟:

  1. 修改动画定义,增加延迟参数:
trigger('datatableRowAnimation', [
  transition(':enter', [
    style({ opacity: 0, height: 0 }),
    animate('300ms {{delay}} ease-out', style({ opacity: 1, height: '*' }))
  ]),
], { params: { delay: '0ms' } })
  1. 在模板中绑定延迟参数:
<div [@datatableRowAnimation]="{ value: '', params: { delay: rowIndex * 100 + 'ms' } }" class="datatable-row">

这样每一行会比前一行晚100ms触发动画,完美实现堆叠依次显示的效果。

内容的提问来源于stack exchange,提问作者medah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 04:50:01