First we add MatPaginatorModule in our AppModule:
. . .
import { MatPaginatorModule } from '@angular/material/paginator';
@NgModule({
. . .
imports: [
. . .
MatPaginatorModule
],
. . .
})
Then add paginator element on the component page:
<table mat-table [dataSource]="dataSource" class="mat-elevation-z8 alternate-row-table"> . . . </table> <mat-paginator [length]="totalRecords" [pageSize]="pageSize" [pageSizeOptions]="[5, 25, 50]" (page)="onPageChange($event)"> </mat-paginator>
Modify the component class file as well:
// import MatPaginator and MatTableDataSource
import { MatTableDataSource } from '@angular/material/table';
import { MatPaginator } from '@angular/material/paginator';
. . .
export class SearchComponent implements OnInit {
// add the MatPaginator component
@ViewChild(MatPaginator) paginator!: MatPaginator;
. . .
// make sure we use MatTableDataSource type for our data
dataSource = new MatTableDataSource<Student>([]);
totalRecords = 0;
pageSize = 5;
ngOnInit(): void {
. . .
// assign the paginator when initialising the component
this.dataSource.paginator = this.paginator;
}
findStudents(pageIndex: number, pageSize: number) {
this.studentService.findStudents(this.model, pageIndex, pageSize)
.subscribe({
next: (response: PaginatedResult<Student>) => {
this.dataSource.data = response.data;
this.totalRecords = response.totalRecords;
. . .
}
});
}
// respond to paging event
onPageChange(event: any) {
this.findStudents(event.pageIndex, event.pageSize);
}
}
And this is an example of a new type for paginated result:
export class PaginatedResult<T> {
data!: T[];
totalRecords!: number;
}

No comments:
Post a Comment