【问题标题】:Angular Material Table - pre-sorting two columns at startup, one based on the otherAngular Material Table - 在启动时对两列进行预排序,一列基于另一列
【发布时间】:2020-08-04 04:01:19
【问题描述】:

我有一个大约八列的 Angular Material 表,我正在尝试对其进行自定义排序。提出表格时,我希望表格最初根据日期按降序排列的列进行排序。这是我实现的。这是我使用的代码:

@ViewChild(MatSort) sort: MatSort;

getDisbursementsDetails() {
    this.claimDetailsService.getDisbursements(this.claimNumber).subscribe(
      disbursements => {
        let disbursementsDetails = this.buildDisbursements(disbursements);
        this.disbursementsDataSource = new MatTableDataSource(disbursementsDetails);
        this.disbursementsDataSource.paginator = this.paginator;
        this.disbursementsDataSource.sort = this.sort;
        this.applySorting(this.disbursementsDataSource);
        this.sort.sort(<MatSortable>{id: 'issueDate', start: 'desc'});
      }, error => {
        console.error(error);
        this.disbursementsDetailsSpinner = false;
        this.errorHandling(error);
      }
    )
  }

请注意,applySorting 方法与此问题无关。它所做的只是格式化不同列中的日期和美元金额,以便在对它们进行排序时正确排序。

当表格出现时,导致标有“发布日期”的列被预先排序的行是这样的:

this.sort.sort(<MatSortable>{id: 'issueDate', start: 'desc'});

这就是我想要做的。我希望第二列也基于第一个预排序列进行预排序。第二列由文件编号组成。排序将是降序的。它的工作方式是,如果第一列有多个相同的日期,那么对于这些​​日期,文档编号将按降序排序。

有人知道怎么做吗?

【问题讨论】:

    标签: angular angular-material


    【解决方案1】:

    尝试使用 type 方法进行经典排序,当第一个 sea 字段等于第二个时

    let sortedArray: TypeObject[] = this.disbursementsDetails.data.sort((p1, p2) =>{
       if(p1.field1 > p1.field1){ 
            return 1;
       } else if(p1.field1< p2.field1){
            return -1;
       } else if(p1.field2 > p1.field2){
            return 1;
       } else if(p1.field2< p2.field2){
            return -1;
       }else {
            return 0;
       } 
    });
    
    this.disbursementsDetails.data = sortedArray;
    

    【讨论】:

      最近更新 更多