使用HTTP GET请求在Angular材质表中获取数据 [英] Using HTTP GET request to fetch data in an Angular Material Table
问题描述
我有一个Angular Material表,我想在其中从服务中获取数据.这是我的服务.
I have an Angular Material table in which I want to fetch data from a service. This is my service.
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文件中,我可以使用它在控制台中显示数据,
In my component.ts file, I'm able to display the data in console using this,
ngOnInit() {
this.messageService.getMessageTableData().subscribe(
(response) => console.log(response)
)
}
我已经在Angular material的网站上看到了示例代码,但是由于我的表上有很多客户端过滤功能,因此我想对我的dataSource使用MatTableDataSource.该示例使用了自定义数据源,但我无法在其中包含过滤器.如何在我的表格中显示这些数据,这些数据是从服务中以JSON形式出现的?
I've seen the example code on Angular material's website but since I have a lot of client side filtering on my table, I want to use MatTableDataSource for my dataSource. That example uses a custom dataSource and I'm not able to include my filters in that. How can I display this data, which is coming in JSON form from my service, in my table?
也为我的表附加HTML代码
Attaching the HTML code for my table as well
<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>
推荐答案
您将需要创建MatTableDataSource
的实例,并将您从服务中获取的数据传递给它.像这样:
You'll need to create an instance of the MatTableDataSource
and pass it the data that you're getting from your service. Something like this:
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 供您参考.
Here's a Working Sample StackBlitz for your ref.
这篇关于使用HTTP GET请求在Angular材质表中获取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!