Angular 4 动态table

8 篇文章 0 订阅
6 篇文章 0 订阅

       最近的项目中前端开发遇到多列的table问题,大概有40多列,而且这样的table还比较多,最主要的这个列还不是固定的,所以如果按照以往的硬编码的方式很不灵活,还容易出错;考虑结合阿里的antd组件库使用循环输出的方式解决这个问题;

1.返回数据结构

      后端返回的时候,不能只返回list的内容了,还有返回header的内容,包括header的中文显示名称,header的列属性名称;这样table的表头可以通过header列表循环显示出来;定义数据结构如图所示

public class ColumnHeader {

    private String showName;    //显示中文名

    private String property;    //dto属性
}

     然后数据部分还是List<T>的数组的方式返回;在循环每一行的时候,再循环header,拿到当前item的property显示即可;

2.前端代码

<table>
    <thead>
    <tr>
     <th *ngFor="let column of columnHeaders">
            {{column.showName}}
        </th>
    </tr>
    </thead>
    <tbody>
       <tr  *ngFor="let item of data">
       <td *ngFor="let column of columnHeaders" title="{{item[property]}}">
            <div class="content">{{item[property]}}</div>
        </td>
       </tr>
    </tbody>
</table>

这样就渲染除了table,这个table的列是根据后端返回的columnHeader数组返回的,列的中文显示内容也是根据后端返回的;这种方式的table是完全动态的;减少了之前硬编码的方式多列容易漏,也容易错的问题;结合阿里的antd组件的table可以做出很不错的table出来;

效果如图所示

可以抽象一下,做成个动态的table,只需要提供数据和header信息,就可以渲染出来很漂亮的table;还是很实用的;

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 Angular 中使用 ng-zorro-antd 的 nz-table 组件合并表格,可以使用 nzSpanMethod 属性来指定合并规则。具体步骤如下: 1. 在组件中定义表格数据源 dataSource 和表格列定义 columns。 2. 在表格列定义中,对需要合并的列设置 nzSpanMethod 属性,该属性值为一个回调函数,用于计算该列每个单元格的合并行数和列数。 3. 在回调函数中,可以通过参数 row 和 column 获取当前单元格所在的行和列,然后根据业务需求计算出该单元格需要合并的行数和列数。 示例代码如下: ``` <ng-container *ngFor="let col of columns"> <th *ngIf="!col.children" [nzWidth]="col.width || ''" [nzLeft]="col.left || ''" [nzRight]="col.right || ''" [nzAlign]="col.align || 'center'" [nzVerticalAlign]="col.verticalAlign || 'middle'" [nzSpanMethod]="col.spanMethod"> {{ col.title }} </th> <th *ngIf="col.children" [nzColSpan]="col.colSpan" [nzRowSpan]="col.rowSpan"> {{ col.title }} </th> </ng-container> ``` 其中,columns 数组中的每个元素表示一个表格列定义,具体属性如下: - title:列标题。 - width:列宽度。 - left:左侧距离。 - right:右侧距离。 - align:水平对齐方式。 - verticalAlign:垂直对齐方式。 - children:子列定义,用于实现表头多级嵌套。 - colSpan:列合并数。 - rowSpan:行合并数。 - spanMethod:合并规则回调函数。 合并规则回调函数的参数如下: - row:当前单元格所在的行。 - column:当前单元格所在的列。 回调函数需要返回一个对象,包含以下属性: - rowspan:合并的行数。 - colspan:合并的列数。 示例代码如下: ``` spanMethod(row: any, column: any): { rowspan: number, colspan: number } { if (column.key === 'name') { if (row.id === 1) { return { rowspan: 2, colspan: 1 }; } else if (row.id === 3) { return { rowspan: 2, colspan: 1 }; } } return { rowspan: 1, colspan: 1 }; } ``` 以上代码实现了对 name 列的合并,当该列的值为 'John' 或 'Lucy' 时,将该单元格合并到下一行;当该列的值为 'Tom' 或 'Jerry' 时,将该单元格合并到上一行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值