источник данных, установленный в таблицу mat (angular), имеет данные, но не отображает никаких данных, и таблица пуста

Источник данных таблицы mat (angular) имеет данные (массив с одной строкой), но отображает только заголовок, а таблица пуста.

Проблема в том, что консоль в ngOnInit показывает данные, но моя таблица пуста и отображает только заголовок. Что не так с моим простым кодом?

Код в моем html-файле компонента:

<div class="mat-elevation-z8 show-feature">
  <mat-table #table [dataSource]="samples">
    <!-- from Column -->
    <ng-container matColumnDef="name">
      <mat-header-cell *matHeaderCellDef>Name</mat-header-cell>
      <mat-cell *matCellDef = "let row">
        {{row.name}}
      </mat-cell>
    </ng-container>
    <mat-header-row *matHeaderRowDef='displayedColumns'>
      <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
    </mat-header-row>
  </mat-table>
</div>

Код в моем ts-файле компонента:

export class SpliceConnectionsAttributeControl implements 
        AfterContentInit, OnInit, OnDestroy {


  samples: Samples[];
  displayedColumns = ['name'];

  constructor() { }

  ngOnInit() {
    this.samples = [{name: 'test1'}];
    console.log(this.samples);
  }

  ngOnDestroy() {
    // unsubscribe to ensure no memory leaks
    this.subscription.unsubscribe();
  }

  ngAfterContentInit() { }
}

Модель:

export class Samples {
  name: string ;
}

person R_SH    schedule 27.09.2019    source источник


Ответы (2)


Синтаксис вашего шаблона неправильный, вы должны использовать теги table, th, tr и td с директивами материала angular:

<table mat-table #table [dataSource]="samples">
  <ng-container matColumnDef="name">
    <th mat-header-cell *matHeaderCellDef> Name </th>
     <td mat-cell *matCellDef="let row">
       {{row.name}}
     </td>
  </ng-container>
  <tr mat-header-row *matHeaderRowDef='displayedColumns'></tr>
  <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>

ДЕМО: STACKBLITZ

person AJT82    schedule 27.09.2019
comment
Я очень ценю ваше время и вашу помощь, даже предоставив демонстрацию, которая полностью решит проблему. - person R_SH; 30.09.2019
comment
Добро пожаловать. Так вы решили вашу проблему? Если это так, рассмотрите возможность принятия ответа, щелкнув серую галочку под голосованием за этот ответ, что означает, что вопрос решен :) - person AJT82; 01.10.2019

Ваш элемент mat-row находится внутри вашего элемента mat-header-row. См. https://material.angular.io/components/table/overview https://stackblitz.com/edit/angular-3jszti

person observingstream    schedule 27.09.2019