Использование HTTP GET-запроса для извлечения данных в угловой таблице материалов - PullRequest
0 голосов
/ 12 декабря 2018

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

import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Message } from '../messages/message-table/message.model';

@Injectable()

export class MessageService {
  constructor(private http: HttpClient) {}

  getMessageTableData() {
    return this.http.get<Message[]>('<removed>');
  }
}

Это интерфейс Сообщение для данных

export interface Message {
    RequestID: string;
    RequestStatus: string;
    RequestorName: string;
    SubmissionDate: string;
    ApproverName: string;
    ApprovalDate: string;
    Subject: string;
    MessageStatus: string;
    ReadStatus: string;
  }

В моем файле component.ts я могу отображать данные в консоли с помощью этого,

ngOnInit() {

    this.messageService.getMessageTableData().subscribe(
      (response) => console.log(response)
    )
}

Я видел пример кода на веб-сайте Angular, но так как в моей таблице много фильтрации на стороне клиента, я хочу использовать MatTableDataSource для своего dataSource.В этом примере используется пользовательский источник данных, и я не могу включить в него свои фильтры.Как я могу отобразить эти данные, которые поступают в форме JSON из моего сервиса, в мою таблицу?

Прикрепление HTML-кода для моей таблицы

<table mat-table [dataSource]="dataSource" matSort class="mat-elevation-z8">
    <ng-container matColumnDef="RequestID">
        <th mat-header-cell *matHeaderCellDef mat-sort-header> Request ID </th>
        <td mat-cell *matCellDef="let element"> {{element.RequestID}} </td>
    </ng-container>

    <ng-container matColumnDef="RequestStatus">
        <th mat-header-cell *matHeaderCellDef mat-sort-header> Request Status </th>
        <td mat-cell *matCellDef="let element"> {{element.RequestStatus}} </td>
    </ng-container>

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

    <ng-container matColumnDef="SubmissionDate">
        <th mat-header-cell *matHeaderCellDef mat-sort-header> Submission Date </th>
        <td mat-cell *matCellDef="let element"> {{element.SubmissionDate}} </td>
    </ng-container>

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

    <ng-container matColumnDef="ApprovalDate">
        <th mat-header-cell *matHeaderCellDef mat-sort-header> Approval Date </th>
        <td mat-cell *matCellDef="let element"> {{element.ApprovalDate}} </td>
    </ng-container>

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

    <ng-container matColumnDef="MessageStatus">
        <th mat-header-cell *matHeaderCellDef mat-sort-header> Message Status </th>
        <td mat-cell *matCellDef="let element"> {{element.MessageStatus}} </td>
    </ng-container>

    <ng-container matColumnDef="ReadStatus">
        <th mat-header-cell *matHeaderCellDef mat-sort-header> Read Status </th>
        <td mat-cell *matCellDef="let element"> {{element.ReadStatus}} </td>
    </ng-container>
</table>

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Вам нужно будет создать экземпляр MatTableDataSource и передать ему данные, которые вы получаете от своего сервиса.Примерно так:

import { MatSort, MatTableDataSource } from '@angular/material';
...

@Component({...})
export class TableComponent implements OnInit {
  ...
  dataSource;

  @ViewChild(MatSort) sort: MatSort;

  ngOnInit() {
    this.messageService.getMessageTableData()
      .subscribe(response => {
        this.dataSource = new MatTableDataSource(response);
        this.dataSource.sort = this.sort;
      });
  }

  ...

}

Вот вам Рабочий образец StackBlitz для вашей ссылки.

0 голосов
/ 12 декабря 2018

Вы можете использовать MatTableDataSource, это поможет фильтровать и сортировать.

dataSource: new MatTableDataSource([]);
ngOnInit() {
   this.messageService.getMessageTableData().subscribe( (data) => {
       this.dataSource.data = data || []
   })
}

applyFilter(filterValue: string) {
   this.dataSource.filter = filterValue.trim().toLowerCase();
}

Для справки добавлено stackblitz образец кода.

0 голосов
/ 12 декабря 2018

Вы можете отфильтровать этот источник данных или я что-то упустил

dataSource: any;
ngOnInit() {
   this.messageService.getMessageTableData().subscribe(
     (response) => this.dataSource = response
     )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...