table表格实现动态合并行(Angular+ng-zorro)

本文介绍如何在Angular框架配合Ng-Zorro组件中,使用ngFor指令和自定义函数,实现在表格中根据后端返回数据合并相同单元格的功能。代码示例和sortAndMerge函数展示了合并策略和条件判断过程。
摘要由CSDN通过智能技术生成

需求:根据后端返回的数据,把数据相同的单元格进行合并,如图所示

技术:angular框架+ng-zorro组件中table表格

代码:

html中:(这段代码是前三列的代码,是需要判断相同数据合并的)

 <tr *ngFor="let item of table02  let allIndex = index;">
          <ng-container *ngFor="let t of mergeColumns; index as i">
            <ng-container *ngIf="item[t]!==undefined ">
              <!-- 方案2 -->
              <td colspan="4" [attr.rowspan]="item[mergeFix+t]">{{ item[t] }}
              </td>
              <!-- 方案2 -->
            </ng-container>
          </ng-container>
</tr>

ts中:

  //tableData是数据
  tableData: any; 
  //table02是html所需要的数组
  table02: any = [];
  mergeFix = 'mergeFlag'
  // mergeColumns 是需要判断相同数据的字段
  mergeColumns = ['specName', 'deviceName', 'dataPointName'];
  rowspan: any;
  ngOnInit(): void {
    if (this.data) {
      this.table02 = this.sortAndMerge(this.data)
    }
  }
// 数据相同合并单元格
  private sortAndMerge(rawDataList): any[] {
    const rowspan = this.mergeFix, mergeColumns = this.mergeColumns;
    if (rawDataList.length > 1) {//长度⼤于1才有资格进⼀步处理
      const sortColumn = Object.keys(rawDataList[0]),
        keySort = raw => {
          for (let i = raw.length - 1; i > 0; i--) {
            let newObj = {}, tmpObj = raw[i];
            sortColumn.forEach(s => newObj[s] = tmpObj[s]);
            raw[i] = newObj;
          }
          return raw;
        }, compare = (a, b, c = sortColumn[0], i = 0) => {
          if (a[c] === b[c]) { //等于的话进⾏判断是否还有后续字段需要排序,没有则返回0;有则递归进⾏后续字段排序处理。
            if (i === sortColumn.length - 1) {//没有后续字段
              return i = 0;
            }
            i++;
            return compare(a, b, sortColumn[i], i);//递归排序后续字段
          } else if (a[c] > b[c]) { //⼤于返回1
            return 1;
          } else { //⼩于返回-1
            return -1;
          }
        }, arr = keySort(JSON.parse(JSON.stringify(rawDataList))).sort(compare), aLen = arr.length
      for (let i = mergeColumns.length - 1; i >= 0; i--) {//先迭代待合并列
        let index = 0;
        let title = mergeColumns[i];
        let span = 1;//合并列属性默认为1
        for (let j = 0; j < aLen; j++) {
          let comp = arr[index][title];
          if (arr[j][title] === comp) {
            j !== index && (delete arr[j][title], span++);
            j === aLen - 1 && (arr[index][rowspan + title] = span);
          } else {
            span > 1 && (arr[index][rowspan + title] = span, span = 1);
            index = j
          }
        }
      }
      return arr
    }
    return rawDataList
  }

Angular中,您可以使用ng-zorro-antd库中的`nz-date-picker`组件来创建一个带有日历和日期范围的日期选择器。以下是一个使用`nz-date-picker`的例子: 1. 首先,您需要在您的应用中安装和导入`ng-zorro-antd`库。 2. 在您的组件的HTML模板中添加一个`nz-date-picker`元素,并使用`nzMode`属性将其定义为日期选择器。 ```html <nz-date-picker nzMode="date"></nz-date-picker> ``` 3. 在您的组件中,您需要定义一个`nz-date-picker`对象,并将其与`nz-date-picker`元素相关联。您还可以使用`nzDisabledDate`属性来定义可选择的日期范围。 ```typescript import { Component } from '@angular/core'; import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; @Component({ selector: 'app-date-picker', templateUrl: './date-picker.component.html', styleUrls: ['./date-picker.component.css'] }) export class DatePickerComponent { disabledDate = (current: Date): boolean => { const minDate = new Date(2020, 0, 1); const maxDate = new Date(2020, 11, 31); return current < minDate || current > maxDate; } constructor() { } } ``` 在这个例子中,我们定义了一个`disabledDate`函数来禁用不在2020年1月1日和2020年12月31日之间的日期。 4. 最后,您需要在`nz-date-picker`中使用`nzFormat`属性来定义日期的格式。 ```html <nz-date-picker nzMode="date" nzFormat="yyyy-MM-dd" [nzDisabledDate]="disabledDate"></nz-date-picker> ``` 在这个例子中,我们将日期格式定义为`yyyy-MM-dd`。 这就是如何在Angular中使用ng-zorro-antd库中的`nz-date-picker`组件创建一个带有日历和日期范围的日期选择器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值