0

I am using Angular Material and want to show a data table inside a custom modal and the data is not getting filled in, even not the header titles. Everything is empty.

Here is my History modal component:

import { Component, OnInit } from "@angular/core";

@Component({
  selector: "app-history",
  templateUrl: "./history.component.html",
  styleUrls: ["./history.component.scss"]
})
export class HistoryComponent implements OnInit {
  displayedColumns = ["position", "name", "weight", "symbol"];
  dataSource = ELEMENT_DATA;

  constructor() { }

  ngOnInit() {
  }

}

export interface Element {
  name: string;
  position: number;
  weight: number;
  symbol: string;
}
const ELEMENT_DATA: Element[] = [
  {position: 1, name: "Hydrogen", weight: 1.0079, symbol: "H"},
  {position: 2, name: "Helium", weight: 4.0026, symbol: "He"},
  {position: 3, name: "Lithium", weight: 6.941, symbol: "Li"},
  {position: 4, name: "Beryllium", weight: 9.0122, symbol: "Be"},
  {position: 5, name: "Boron", weight: 10.811, symbol: "B"},
  {position: 6, name: "Carbon", weight: 12.0107, symbol: "C"},
  {position: 7, name: "Nitrogen", weight: 14.0067, symbol: "N"},
  {position: 8, name: "Oxygen", weight: 15.9994, symbol: "O"},
  {position: 9, name: "Fluorine", weight: 18.9984, symbol: "F"},
  {position: 10, name: "Neon", weight: 20.1797, symbol: "Ne"},
  {position: 11, name: "Sodium", weight: 22.9897, symbol: "Na"},
  {position: 12, name: "Magnesium", weight: 24.305, symbol: "Mg"},
  {position: 13, name: "Aluminum", weight: 26.9815, symbol: "Al"},
  {position: 14, name: "Silicon", weight: 28.0855, symbol: "Si"},
  {position: 15, name: "Phosphorus", weight: 30.9738, symbol: "P"},
  {position: 16, name: "Sulfur", weight: 32.065, symbol: "S"},
  {position: 17, name: "Chlorine", weight: 35.453, symbol: "Cl"},
  {position: 18, name: "Argon", weight: 39.948, symbol: "Ar"},
  {position: 19, name: "Potassium", weight: 39.0983, symbol: "K"},
  {position: 20, name: "Calcium", weight: 40.078, symbol: "Ca"},
];
:host {
  display: flex;
}

.example-container {
  display: flex;
  flex-direction: column;
  min-width: 300px;
  overflow: auto;
  max-height: 500px;
}

.mat-header-cell.mat-sort-header-sorted {
  color: black;
}
<h2 mat-dialog-title>History</h2>
<!-- <mat-dialog-content class="example-container"> -->
  <div class="example-container">
    <mat-table #table [dataSource]="dataSource" matSort>

      <!-- Position Column -->
      <ng-container matColumnDef="position">
        <th mat-header-cell *matHeaderCellDef mat-sort-header> No. </th>
        <td mat-cell *matCellDef="let element"> {{element.position}} </td>
      </ng-container>

      <!-- Name Column -->
      <ng-container matColumnDef="name">
        <th mat-header-cell *matHeaderCellDef mat-sort-header> Name </th>
        <td mat-cell *matCellDef="let element"> {{element.name}} </td>
      </ng-container>

      <!-- Weight Column -->
      <ng-container matColumnDef="weight">
        <th mat-header-cell *matHeaderCellDef mat-sort-header> Weight </th>
        <td mat-cell *matCellDef="let element"> {{element.weight}} </td>
      </ng-container>

      <!-- Symbol Column -->
      <ng-container matColumnDef="symbol">
        <th mat-header-cell *matHeaderCellDef mat-sort-header> Symbol </th>
        <td mat-cell *matCellDef="let element"> {{element.symbol}} </td>
      </ng-container>

      <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
      <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
    </mat-table>
  </div>
<!-- </mat-dialog-content> -->
<mat-dialog-actions>
  <button mat-button [mat-dialog-close]="true">OK</button>
</mat-dialog-actions>

Here is my Angular Material import module which I import into same module where I declare my HistoryComponent:

import { NgModule } from "@angular/core";

import {
  MatToolbarModule,
  MatButtonModule,
  MatButtonToggleModule,
  MatIconModule,
  MatCardModule,
  MatOptionModule,
  MatSelectModule,
  MatFormFieldModule,
  MatExpansionModule,
  MatListModule,
  MatCheckboxModule,
  MatSidenavModule,
  MatInputModule,
  MatDatepickerModule,
  MatNativeDateModule,
  MatDialogModule,
  MatTableModule,
  MatSortModule,
} from "@angular/material";

const materialModules = [
  MatToolbarModule,
  MatButtonModule,
  MatButtonToggleModule,
  MatIconModule,
  MatCardModule,
  MatOptionModule,
  MatSelectModule,
  MatFormFieldModule,
  MatExpansionModule,
  MatListModule,
  MatCheckboxModule,
  MatSidenavModule,
  MatInputModule,
  MatDatepickerModule,
  MatNativeDateModule,
  MatDialogModule,
  MatTableModule,
  MatSortModule,
];

@NgModule ({
  imports: [...materialModules],
  exports: [...materialModules],
})
export class MaterialModule { }

The HistoryComponent is declared and also added to the entryComponents array.

When I open the modal in the browser, no data is displayed in the table:

<mat-table _ngcontent-c19="" class="mat-table" matsort="" role="grid" ng-reflect-data-source="[object Object],[object Object">
<tr _ngcontent-c19="" mat-header-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr>
<tr _ngcontent-c19="" mat-row="" class="ng-star-inserted" style=""></tr></mat-table>

What is hapenning here? I am not getting any errors or whatsoever.

StackBlitz example here: https://stackblitz.com/edit/angular-assyye but suddenly it is working there and I have no clue why.

4
  • 1
    Can you create stackblitz example? Commented May 4, 2018 at 20:10
  • Here: stackblitz.com/edit/angular-assyye but suddenly it works. Do not know why... Commented May 4, 2018 at 20:37
  • Please check this stackblitz.com/edit/angular-wbvana?file=src/app/app.module.ts I only added BrowserAnimationsModule Commented May 4, 2018 at 20:40
  • I have this in my original code and forgot it now. But why is it working now? I have done nothing different, except another module inbetween. Do you know why it is not working in my dev env? Commented May 4, 2018 at 20:41

1 Answer 1

2

The problem is the version upgrade which happened on 3.5.2018. They changed the mat-table-api heavily without mentioning it in the documentation.

  • Instead of <mat-table> it is <table mat-table> now.
  • Instead of <mat-header-cell> it is <th mat-header-cell> now.
  • Instead of <mat-cell> it is <td mat-cell> now.

Dear Angular Material team. Please add a shoutout to your documentation with breaking changes and such a big version upgrade from today to tomorrow. You get no notification anywhere and spending hours on it.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.