'How to change the text in the label in pagination?
I use Angular Material. How to change the text in the label in the pagination ? For label for the page size selector.
I tried to do it but did not help:
<mat-paginator [pageSizeOptions]="[5, 10, 20]" [itemsPerPageLabel]="['The amount of data displayed']" showFirstLastButtons></mat-paginator>
Solution 1:[1]
You can also do this directly from the pagination instance. For example, if you want to add commas to the paginator label.
@ViewChild(MatPaginator, { static: true })
paginator: MatPaginator;
decimalPipe = new DecimalPipe(navigator.language);
ngOnInit() {
this.paginator._intl.itemsPerPageLabel = 'Per page';
this.paginator._intl.getRangeLabel = (page: number, pageSize: number, length: number) => {
const start = page * pageSize + 1;
const end = (page + 1) * pageSize;
return `${start} - ${end} of ${this.decimalPipe.transform(length)}`;
};
}
Solution 2:[2]
MatPaginator allows you to change paginator labels using the MatPaginatorIntl class.
You can translate:
- itemsPerPageLabel
- nextPageLabel
- previousPageLabel
- firstPageLabel
- lastPageLabel
- getRangeLabel
I created a localizationService with a translateMatPaginator method:
translateMatPaginator(paginator: MatPaginator) {
paginator._intl.firstPageLabel = '<custom label here>';
paginator._intl.itemsPerPageLabel = '<custom label here>';
paginator._intl.lastPageLabel = '<custom label here>';
paginator._intl.nextPageLabel = '<custom label here>';
paginator._intl.previousPageLabel = '<custom label here>';
}
You only need to inject it in your component and call:
this.localizationService.translateMatPaginator(paginator);
Solution 3:[3]
Use childView
to access paginator in your .ts
file as follows:
@ViewChild(MatPaginator) paginator: MatPaginator;
ngOninit() {
this.paginator._intl.itemsPerPageLabel = 'your custom text';
}
Solution 4:[4]
Write a custom version of getRangeLabel
This is a simple, flexible, and powerful approach and allows you to customize the full paginator text instead of just one part of it.
In your component, set up your paginator:
@ViewChild(MatPaginator, {static : false}) paginator!: MatPaginator;
Then assign a custom function in the afterViewInit
:
ngAfterViewInit() {
this.paginator._intl.getRangeLabel = this.getRangeDisplayText;
}
Then set up a custom function to display the text you need:
getRangeDisplayText = (page: number, pageSize: number, length: number) => {
const initialText = `Displaying users`; // customize this line
if (length == 0 || pageSize == 0) {
return `${initialText} 0 of ${length}`;
}
length = Math.max(length, 0);
const startIndex = page * pageSize;
const endIndex = startIndex < length
? Math.min(startIndex + pageSize, length)
: startIndex + pageSize;
return `${initialText} ${startIndex + 1} to ${endIndex} of ${length}`; // customize this line
};
This will use whatever pageSize
and length
you have in your HTML or have configured in your component.
<mat-paginator [length]="dataSource.total"
[pageSize]="10"
hidePageSize
showFirstLastButtons>
If your data returns 50 recordes, this will show this text:
Displaying users 1 to 10 of 50
Solution 5:[5]
this helped me to change 'itemsPerPageLabel'
In your component:
import { MatPaginatorIntl } from '@angular/material/paginator';
constructor(private paginator: MatPaginatorIntl) {
paginator.itemsPerPageLabel = 'The amount of data displayed'';
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Chris Fremgen |
Solution 2 | Andr3a |
Solution 3 | Ramin Ar |
Solution 4 | Tony Brasunas |
Solution 5 | Samara Muñoz |