Невозможно отобразить данные в таблице угловых материалов - PullRequest
0 голосов
/ 16 октября 2018

Используя таблицу данных проектирования угловых материалов, мне нужно получить данные из REST API и отобразить ответ в таблице.

Но возникла проблема с отображением данных в таблице.

Modal.ts

export interface ReleaseModal {
    results: [{
        id: number;
        title: string;
    }]
} 

Service.ts

  getReleaseNotes(): Observable<ReleaseModal[]> {
      return this.http.get<ReleaseModal[]>(this.url);
  } 

component.ts

export class ReleasesComponent implements OnInit, AfterViewInit{
  title = 'Release notes';
  displayedColumns = ['releasenotes'];
  dataSource;

  @ViewChild(MatPaginator) paginator: MatPaginator;
  @ViewChild(MatSort) sort: MatSort;

  constructor ( private releaseNotes: ReleaseService ) {}

  ngOnInit() {
    this.releaseNotes.getReleaseNotes()
    .subscribe(data => {
      this.dataSource = new MatTableDataSource(data);
      console.log(data);
    });
  }

  ngAfterViewInit() {
    this.dataSource.paginator = this.paginator;
    this.dataSource.sort = this.sort;
  }
}

HTML

  <mat-table [dataSource]="dataSource" matSort>

    <ng-container matColumnDef="releasenotes">
      <mat-header-cell *matHeaderCellDef mat-sort-header> Release Notes </mat-header-cell>
      <mat-cell *matCellDef="let row"> {{row.results.title}}% </mat-cell>
    </ng-container>

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

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

Ниже приведен пример ответа, который я получаю от вызова API

{
"results": [
{
"id": "203901655",
"title": "Test Page",
},
....
}

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Попробуйте это:

export class ReleasesComponent implements OnInit, AfterViewInit{
  title = 'Release notes';
  displayedColumns = ['releasenotes'];
  dataSource = new MatTableDataSource<ReleaseModal>();

  @ViewChild(MatPaginator) paginator: MatPaginator;
  @ViewChild(MatSort) sort: MatSort;

  constructor ( private releaseNotes: ReleaseService ) {}

  ngOnInit() {
    this.releaseNotes.getReleaseNotes()
    .subscribe(data => {
      this.dataSource.data = data;
      console.log(data);
    });
  }

  ngAfterViewInit() {
    this.dataSource.paginator = this.paginator;
    this.dataSource.sort = this.sort;
  }
}
0 голосов
/ 16 октября 2018

Измените ngOnInit, как показано ниже, это следует исправить:

dispalyedColumns=['title']
ngOnInit() {
    this.releaseNotes.getReleaseNotes()
    .subscribe(data => {
      this.dataSource = new MatTableDataSource(data.results);
      this.dataSource.paginator = this.paginator;
      this.dataSource.sort = this.sort;
      console.log(data);
    });
}

Удалите строки в ngAfterViewInit.Проблема в том, что ngAfterViewInit вызывается до того, как вы получите данные от службы, а dataSource по-прежнему не определено.

HTML:

<ng-container matColumnDef="title">
  <mat-header-cell *matHeaderCellDef mat-sort-header> Release Notes </mat-header-cell>
  <mat-cell *matCellDef="let row"> {{row.title}}% </mat-cell>
</ng-container>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...