Angular Material Table Cell Formatting

后端 未结 4 573
刺人心
刺人心 2021-02-10 14:21

I\'m using angular material table for displaying data and dyanmically binding the table header and table data. Is there any way to format particaular column\'s cell content dyn

相关标签:
4条回答
  • 2021-02-10 14:46

    You can dynamically set the column alignment to right by adding something like, [align]="expression ? 'right' : ''" to the <td> element, so for your code this would look like:

    <table mat-table [dataSource]="dataSource" class="" style="width: 100%;">
    
          <ng-container [matColumnDef]="col" *ngFor="let col of displayedColumns; let i = index">
            <th *matHeaderCellDef> {{displayedFields[i].name}}</th>
            <td mat-cell *matCellDef="let element" [align]="col === 'AMOUNT' ? 'right' : ''"> {{ element[col] }} </td>
          </ng-container> 
    
          <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
          <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
        </table>
    
    0 讨论(0)
  • 2021-02-10 14:52

    If you want to style cells on a mat-table you can target every element inside by using the ::ng-deep CSS selector like this:

    ::ng-deep th.mat-header-cell{
        width: 140px;
        min-width: 140px;
    }
    

    You can also use [ngClass] to apply classes to a cell based on a condition like this:

     <ng-container matColumnDef="outcome">
      <th mat-header-cell *matHeaderCellDef mat-sort-header class="border"> Outcome </th>
      <td mat-cell *matCellDef="let element" class="font-weight-normal text-center text-capitalize"
      [ngClass]="[element.outcome == '' ? 'not-provided' : 'not-provided',
                element.outcome == 'stopped' ? 'provided-stoped' : 'not-provided']">{{element.outcome == '' ? "not provided" : "provided"}}</span> </td>
    </ng-container>
    

    and you just define the classes in your CSS file

    0 讨论(0)
  • 2021-02-10 14:55

    Best solution is to use selector in css as below where 'column_name' is the name you provide in 'matColumnDef'

    .mat-column-'column_name'{
       //your custom css 
       text-align: right;
     }
    

    if your column 'matColumnDef' is 'amount'

    .mat-column-amount{
       //your custom css 
       text-align: right;
     }
    
    0 讨论(0)
  • 2021-02-10 14:57

    At our project at work we use a lot of mat-tables. I've never had luck making any kind of truly customized table by ngFor-ing over the <ng-container>. Almost every one of our tables is built by individually defining each <ng-container> for each column.

    <ng-container matColumnDef="code">
        <th mat-header-cell *matHeaderCellDef> Employee Code </th>
        <td mat-cell *matCellDef="let employee"> {{ employee.code }} </td>
    </ng-container>
    
    <ng-container matColumnDef="description">
        <th mat-header-cell *matHeaderCellDef> Status </th>
        <td mat-cell *matCellDef="let employee"> 
              {{ employee.status?.description }} 
        </td>
    </ng-container>
    
    <ng-container matColumnDef="salary">
        <th mat-header-cell *matHeaderCellDef> Salary </th>
        <td mat-cell *matCellDef="let employee"> {{ employee.salary | currency}} </td>
    </ng-container>
    

    The advantage of this is you can define each column with the styles you want, as well as add more property-specific options such as pipes and/or the elvis operator.

    0 讨论(0)
提交回复
热议问题