Angular 角度7:使用角度材质的服务器端分页
我使用Angular 7和Angular材质作为服务器端分页。我对这件事有意见。问题是分页会变成这样 我想把分页改成这样 如何改变它。示例代码如下所示:- html 服务ts 我试图改变它,但它不起作用。我不知道如何改变它。希望你们都能帮助解决这个问题 这是我的示例代码 提前谢谢。这是我的解决方案 其主要思想是,您必须构建自己的分页器,而不是使用材质分页器。这很简单,只需添加固定的按钮,如First、Prev、Next、Last,以及数据信息,如长度和页面大小,就可以创建页面列表。唯一不起作用的是页面大小,不知道为什么。我想你可以在真正的应用程序中找到原因 然后使用BehaviorSubject处理页面更改。无论如何,您可以在示例中看到这一切Angular 角度7:使用角度材质的服务器端分页,angular,angular-ui-router,angular-material,Angular,Angular Ui Router,Angular Material,我使用Angular 7和Angular材质作为服务器端分页。我对这件事有意见。问题是分页会变成这样 我想把分页改成这样 如何改变它。示例代码如下所示:- html 服务ts 我试图改变它,但它不起作用。我不知道如何改变它。希望你们都能帮助解决这个问题 这是我的示例代码 提前谢谢。这是我的解决方案 其主要思想是,您必须构建自己的分页器,而不是使用材质分页器。这很简单,只需添加固定的按钮,如First、Prev、Next、Last,以及数据信息,如长度和页面大小,就可以创建页面列表。唯一不起作用
还有我留给你的一些小东西。我认为您应该以某种方式限制显示页面的数量,因为页面太多了。@Pohon使用修复程序更新了答案中的stackblitz链接。它的解决方法与paginator类似,只需创建一个BehaviorSubject并在其中添加更改
<div class="example-container mat-elevation-z8">
<div class="example-loading-shade"
*ngIf="isLoadingResults || isRateLimitReached">
<mat-spinner *ngIf="isLoadingResults"></mat-spinner>
<div class="example-rate-limit-reached" *ngIf="isRateLimitReached">
GitHub's API rate limit has been reached. It will be reset in one minute.
</div>
</div>
<div class="example-table-container">
<table mat-table [dataSource]="data" class="example-table"
matSort matSortActive="created" matSortDisableClear matSortDirection="desc">
<!-- Number Column -->
<ng-container matColumnDef="number">
<th mat-header-cell *matHeaderCellDef>#</th>
<td mat-cell *matCellDef="let row">{{row.number}}</td>
</ng-container>
<!-- Title Column -->
<ng-container matColumnDef="title">
<th mat-header-cell *matHeaderCellDef>Title</th>
<td mat-cell *matCellDef="let row">{{row.title}}</td>
</ng-container>
<!-- State Column -->
<ng-container matColumnDef="state">
<th mat-header-cell *matHeaderCellDef>State</th>
<td mat-cell *matCellDef="let row">{{row.state}}</td>
</ng-container>
<!-- Created Column -->
<ng-container matColumnDef="created">
<th mat-header-cell *matHeaderCellDef mat-sort-header disableClear>
Created
</th>
<td mat-cell *matCellDef="let row">{{row.created_at | date}}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
</div>
<mat-paginator [length]="resultsLength" [pageSize]="30"></mat-paginator>
</div>
export class TableHttpExample implements AfterViewInit {
displayedColumns: string[] = ['created', 'state', 'number', 'title'];
exampleDatabase: ExampleHttpDatabase | null;
// data: GithubIssue[] = [];
resultsLength = 0;
isLoadingResults = true;
isRateLimitReached = false;
@ViewChild(MatPaginator, {static: false}) paginator: MatPaginator;
@ViewChild(MatSort, {static: false}) sort: MatSort;
constructor(private _httpClient: HttpClient) {}
ngAfterViewInit() {
this.exampleDatabase = new ExampleHttpDatabase(this._httpClient);
// If the user changes the sort order, reset back to the first page.
this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0);
merge(this.sort.sortChange, this.paginator.page)
.pipe(
startWith({}),
switchMap(() => {
this.isLoadingResults = true;
return this.exampleDatabase!.getRepoIssues(
this.sort.active, this.sort.direction, this.paginator.pageIndex);
}),
map(data => {
// Flip flag to show that loading has finished.
this.isLoadingResults = false;
this.isRateLimitReached = false;
this.resultsLength = data.total_count;
return data.items;
}),
catchError(() => {
this.isLoadingResults = false;
// Catch if the GitHub API has reached its rate limit. Return empty data.
this.isRateLimitReached = true;
return observableOf([]);
})
).subscribe(data => this.data = data);
}
}
export interface GithubApi {
items: GithubIssue[];
total_count: number;
}
export interface GithubIssue {
created_at: string;
number: string;
state: string;
title: string;
}
export class ExampleHttpDatabase {
data: GithubIssue[] = [];
/** An example database that the data source uses to retrieve data for the table. */
constructor(private _httpClient: HttpClient) {}
getRepoIssues(sort: string, order: string, page: number): Observable<GithubApi> {
const href = 'https://api.github.com/search/issues';
const requestUrl =
`${href}?q=repo:angular/components&sort=${sort}&order=${order}&page=${page + 1}`;
return this._httpClient.get<GithubApi>(requestUrl);
}
}