В таблице материалов Angular 5 не отображаются данные

Хай, я работаю над веб-приложением в угловой 5. В этом приложении мы используем угловатый материал. На одной из страниц у нас есть мат-стол, но мы не можем заставить его работать. Таблица никогда не показывает нам никаких данных. Данные, которые мы вызываем из нескольких бэкэндов и с помощью отладчика, мы знаем, что данные не равны нулю. Даже если мы попытаемся использовать пример материала angular, это все равно не сработает. Что мы не так?

HTML

  <mat-table #invoiceTable [dataSource] = "datasource" matSort>
    <ng-container matColumnDef = "SerialNr">
      <th mat-header-cell *matHeaderCellDef> SerialNr. </th>
      <td mat-cell *matCellDef = "let movement" > {{movement?.serialNr}} </td>
    </ng-container>
    <tr mat-header-row *matHeaderRowDef = "displayedColumns"></tr>
    <tr mat-row *matRowDef = "let row; columns: displayedColumns;">
    </tr>
  </mat-table>

TS

displayedColumns = ['SerialNr'];
movements = [];
// datasource = new MatTableDataSource<Movement>(this.movements);
datasource: MovementDataSource;

  getMovementsByVehicleID() {
 this.authUser.ownedVehicles.forEach((vehicle) => {
    this.movementService.getMovementsByCarID(vehicle.id).subscribe(
      (newMovemnts) => {
        this.movements = newMovemnts;
        this.datasource.update(newMovemnts);
      },
    );
  }
);
}




export class MovementDataSource extends DataSource<Movement> {

constructor(private movements: Movement[]) {
  super();
}

connect(): Observable<Movement[]> {
  return Observable.of(this.movements);
}

update(movements: Movement[]) {
  movements.forEach((move) => {
    this.movements.push(move);
  });
}

   disconnect(collectionViewer: CollectionViewer): void {
   }
}

МАТЕРИАЛ.ТС

@NgModule({
  imports: [
    MatButtonModule,
    MatToolbarModule,
    MatGridListModule,
    MatIconModule,
    MatInputModule,
    MatMenuModule,
    MatPaginatorModule,
    MatSidenavModule,
    MatSnackBarModule,
    MatCardModule,
    MatTableModule,
    MatSortModule,
    MatProgressSpinnerModule,
    CdkTableModule,
  ],
  exports: [
    MatButtonModule,
    MatToolbarModule,
    MatGridListModule,
    MatIconModule,
    MatInputModule,
    MatMenuModule,
    MatPaginatorModule,
    MatSidenavModule,
    MatSnackBarModule,
    MatCardModule,
    MatTableModule,
    MatSortModule,
    MatProgressSpinnerModule,
    CdkTableModule
  ],
  declarations: []
})
export class MaterialModule {
}

Мы много чего перепробовали. это последняя версия, но она все еще не работает. Конечно, мы добавили модуль материала в импорт app.module.ts. Странно то, что даже примеры не работают. Любые идеи?

Я обновил свой вопрос. Это все еще не работает

Вы следовали руководству по установке? v5.material.angular.io/guide/getting-started

Kim Kern 18.05.2018 22:38

да. на других страницах я использую другие компоненты материала, но не работает только таблица

Ties Theunissen 19.05.2018 11:29

Обнаружение изменений может быть проблемой ... Вы выполняете обнаружение изменений вручную ... В родительском компоненте или в том же компоненте

Atikur Rahman 20.05.2018 05:07

Что вы имеете в виду под детектированием?

Ties Theunissen 22.05.2018 16:25

попробуйте добавить DI следующим образом: constructor (private ref: ChangeDetectorRef) и добавьте эту строку this.ref.detectChanges (); перед этим .movements = newMovemnts;

chandoo 10.08.2018 06:58
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
5
2 636
2

Ответы 2

По документации Стол | Угловой материал,

  1. <th mat-header-cell *matHeaderCellDef> SerialNr. </th> должен быть частью ng-контейнера согласно документации. Пробовал без него, и таблица не отображается. В вашем случае это отсутствует.
  2. displayedColumns должен быть массивом строк, который содержит столбцы, которые необходимо отобразить. Я вижу, что этого тоже не хватает в вашем component.ts. В вашем случае это должен быть displayedColumns = ['SerialNr'];

Остальное все выглядит нормально.

Разветвил существующий пример на stackblitz

Я включил ваш ответ, но он все еще не работает.

Ties Theunissen 22.05.2018 16:25

Можете ли вы создать проект stackblitz, чтобы его было легко отлаживать

Ravi Sankar Rao 22.05.2018 21:39

У меня была та же проблема, и я забыл вызвать метод renderRows () при обновлении асинхронных данных. См. Документацию по таблице материалов Angular 5 https://v5.material.angular.io/components/table/overview.

Этот ответ вдохновил меня: Вызов renderRows () в таблице материалов Angular

Другие вопросы по теме