显示空行的角度材料表

Nic*_*lad 4 angular-material angular angular7

我正在尝试将 Angular 的材料表集成到一个新项目中,但由于某种原因数据没有显示,只有空行。我在另一个项目中使用了相同的逻辑并且它起作用了,我花了很多时间来寻找原因,但没有任何效果。

我需要在一个名为“ cores ”的延迟加载模块中添加该表,并导入了材料表模块:

import { MatTableModule } from '@angular/material';
imports: [
    CommonModule,
    CoresRoutingModule,
    MatTableModule
  ]
Run Code Online (Sandbox Code Playgroud)

我创建了一个返回“ICore”对象数组的服务:

getCores(): Observable<ICore[]> {
    return this.http.get<ICore[]>('/cores');
  }
Run Code Online (Sandbox Code Playgroud)

ICORE接口:

export interface ICore {
  id: number;
  name: string;
}
Run Code Online (Sandbox Code Playgroud)

我的“ index.component.html ”文件中的HTML :

<mat-table [dataSource]="dataSource">
  <ng-container matColumnDef="id">
    <mat-header-cell *matHeaderCellDef> Id </mat-header-cell>
    <mat-cell *matCellDef="let core"> {{ core.id }}</mat-cell>
  </ng-container>
  <ng-container matColumnDef="name">
    <mat-header-cell *matHeaderCellDef> Name </mat-header-cell>
    <mat-cell *matCellDef="let core"> {{ core.name }}</mat-cell>
  </ng-container>
  <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
  <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
Run Code Online (Sandbox Code Playgroud)

“index.components.ts”文件中的逻辑:

dataSource = new MatTableDataSource<ICore>();
columnsToDisplay = ['id', 'name'];

constructor(private coreService: CoreService) { }

  ngOnInit() {
    this.coreService.getCores().subscribe(
      res => {
        this.dataSource.data = res;
        console.log(this.dataSource);
      },
      err => console.log(err)
    );
  }
Run Code Online (Sandbox Code Playgroud)

从我的 console.log 我看到 dataSource 已填充:

MatTableDataSource {_renderData: BehaviorSubject, _filter: BehaviorSubject, _internalPageChanges: Subject, _renderChangesSubscription: Subscriber, sortingDataAccessor: ƒ, …}
data: Array(3)
0: {id: 1, name: "core1"}
1: {id: 2, name: "core2"}
2: {id: 3, name: "core3"}
Run Code Online (Sandbox Code Playgroud)

我也试过这个方法:

dataSource = new CoreDataSource(this.coreService);
columnsToDisplay = ['id', 'name'];

constructor(private coreService: CoreService) { }

export class CoreDataSource extends DataSource<any> {   
    constructor(private coreService: CoreService) {
        super();
    }

  connect(): Observable<ICore[]> {
    console.log(this.coreService.getCores());
    return this.coreService.getCores();   }

  disconnect() {} }
Run Code Online (Sandbox Code Playgroud)

但结果相同。我觉得这是我忘记做的事情,但我没有找到它。

提前致谢!

Fab*_*üng 6

确保使用相同的变量来显示您在组件中定义的列。

成分:

columnsToDisplay = ['id', 'name'];
Run Code Online (Sandbox Code Playgroud)

模板:

<mat-header-row *matHeaderRowDef="columnsToDisplay"></mat-header-row>
<mat-row *matRowDef="let row; columns: columnsToDisplay;"></mat-row>
Run Code Online (Sandbox Code Playgroud)