Ячейка нижнего колонтитула не отображается внутри * ngFor в Mat-Table

Я пытаюсь показать сумму внизу своей таблицы.

Я выполнил точно такие же шаги, как указано в документации, но все еще не работал.

Ниже мой код шаблона

<table mat-table [dataSource]="transactions" matSort class="table table-hover">
    <ng-container *ngFor="let columnName of displayedColumns" [matColumnDef]="columnName">
        <th mat-header-cell *matHeaderCellDef mat-sort-header class="text-danger">{{ columnName }}</th>
        <td mat-cell *matCellDef="let row">{{ row[columnName] }}</td>
        <td mat-footer-cell *matFooterCellDef> Total </td>
    </ng-container>
    <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
    <tr mat-row *matRowDef="let row; columns: displayedColumns" (click)="getRecord(row)"></tr>
    <td mat-footer-cell *matFooterCellDef>{{ total }}</td>
</table>

В компоненте

  total = this.transactions.map(t => t.cost).reduce((acc, value) => acc + value, 0);

Ниже мой рабочий пример. Пожалуйста, скажи мне, что я здесь делаю не так

https://stackblitz.com/edit/angular-ehc6fn?file=src%2Fapp%2Ftable-footer-row-example.ts


person MasterX    schedule 17.04.2020    source источник
comment
Обратите внимание на разницу в примере и в коде, который вы пытаетесь написать. Должно быть легко. stackblitz.com/angular/jampglnqxyyx?file= src / app /   -  person Nikhil Sahu    schedule 17.04.2020


Ответы (1)


попробуйте с этим.

<table mat-table [dataSource]="transactions" class="mat-elevation-z8">
  <!-- Item Column -->
  <ng-container matColumnDef="item">
    <th mat-header-cell *matHeaderCellDef> Item </th>
    <td mat-cell *matCellDef="let transaction"> {{transaction.item}} </td>
    <td mat-footer-cell *matFooterCellDef> Total </td>
  </ng-container>

  <!-- Cost Column -->
  <ng-container matColumnDef="cost">
    <th mat-header-cell *matHeaderCellDef> Cost </th>
    <td mat-cell *matCellDef="let transaction"> {{transaction.cost | currency}} </td>
    <td mat-footer-cell *matFooterCellDef> {{getTotalCost() | currency}} </td>
  </ng-container>

  <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
  <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
  <tr mat-footer-row *matFooterRowDef="displayedColumns"></tr>
</table>

проверьте рабочую демонстрацию

Обновлено

<table mat-table [dataSource]="transactions" matSort class="table table-hover">
    <ng-container *ngFor="let columnName of displayedColumns" [matColumnDef]="columnName">
        <th mat-header-cell *matHeaderCellDef mat-sort-header class="text-danger">{{ columnName }}</th>
        <td mat-cell *matCellDef="let row">{{ row[columnName] }}</td>
        <td mat-footer-cell *matFooterCellDef>
          {{columnName === 'item' ? 'Total': getTotalCost()}}
        </td>
    </ng-container>
    <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
    <tr mat-row *matRowDef="let row; columns: displayedColumns" (click)="getRecord(row)"></tr>
    <tr mat-footer-row *matFooterRowDef="displayedColumns"></tr>
</table>

обновленная демонстрация

person Piyush Jain    schedule 17.04.2020
comment
Это решение по умолчанию, которого я не ожидал. Я хотел сделать это с помощью динамических столбцов, как я предоставил - person MasterX; 17.04.2020
comment
рендеринг каждого столбца и строк внутри цикла for - person MasterX; 17.04.2020
comment
да, это работает, но только одна проблема, в Total она отображается как NAN вместо числа - person MasterX; 17.04.2020
comment
Я использовал тот же html-код в вашем URL-адресе stackblitz. Работает нормально. - person Piyush Jain; 17.04.2020
comment
Я пробовал с разными данными, числа как с плавающей точкой - person MasterX; 17.04.2020