过滤时自定义 angular 指令中的分页不更新(How to customize mat-paginator in angular material)
Pagination doesn't update in customized angular directive when filtering (How to customize mat-paginator in angular material)
根据 Marshal 的回答,我已经在 angular material 数据 table 中实现了自定义指令。但是从 table 过滤数据时,我遇到了分页问题。过滤时分页不更新。
我们在制作滤镜的时候,无论如何都需要调用指令的“initPageRange”函数,所以首先我们需要获取“指令”。由于指令具有作为分页器的 属性 “matPag”,我们可以在构造函数和函数 initPageRange
中创建 public 这个变量
constructor(
@Host() @Self() @Optional() private readonly matPag: MatPaginator,
private vr: ViewContainerRef,
private ren: Renderer2
)
//replace by
constructor(
@Host() @Self() @Optional() public readonly matPag: MatPaginator,
private vr: ViewContainerRef,
private ren: Renderer2
)
等于函数
private initPageRange(): void {
...
}
public initPageRange(): void {
...
}
我们将使用 ViewChild 获取“指令”,但我们需要获取 MatPaginator,因为分页器将是 属性:matPag
- 请参阅函数 ngOnInit()-
@ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;
ngOnInit() {
this.dataSource.paginator = this.paginator;
}
@ViewChild(StylePaginatorDirective, { static: true }) paginator: StylePaginatorDirective;
ngOnInit() {
this.dataSource.paginator = this.paginator.matPag;
}
最后是添加输入
<mat-form-field>
<mat-label>Filter</mat-label>
<input matInput (keyup)="applyFilter($event)" placeholder="Ex. Mia" #input>
</mat-form-field>
和函数applyFilter
applyFilter(event: Event) {
const filterValue = (event.target as HTMLInputElement).value;
this.dataSource.filter = filterValue.trim().toLowerCase();
if (this.dataSource.paginator) {
this.dataSource.paginator.firstPage();
setTimeout(() => {
this.paginator.initPageRange();
});
}
}
需要在 setTimeout 中包含函数 initPAgeRange 以在 Angular 刷新应用程序后执行
根据 Marshal 的回答,我已经在 angular material 数据 table 中实现了自定义指令。但是从 table 过滤数据时,我遇到了分页问题。过滤时分页不更新。
我们在制作滤镜的时候,无论如何都需要调用指令的“initPageRange”函数,所以首先我们需要获取“指令”。由于指令具有作为分页器的 属性 “matPag”,我们可以在构造函数和函数 initPageRange
中创建 public 这个变量constructor(
@Host() @Self() @Optional() private readonly matPag: MatPaginator,
private vr: ViewContainerRef,
private ren: Renderer2
)
//replace by
constructor(
@Host() @Self() @Optional() public readonly matPag: MatPaginator,
private vr: ViewContainerRef,
private ren: Renderer2
)
等于函数
private initPageRange(): void {
...
}
public initPageRange(): void {
...
}
我们将使用 ViewChild 获取“指令”,但我们需要获取 MatPaginator,因为分页器将是 属性:matPag
- 请参阅函数 ngOnInit()-
@ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;
ngOnInit() {
this.dataSource.paginator = this.paginator;
}
@ViewChild(StylePaginatorDirective, { static: true }) paginator: StylePaginatorDirective;
ngOnInit() {
this.dataSource.paginator = this.paginator.matPag;
}
最后是添加输入
<mat-form-field>
<mat-label>Filter</mat-label>
<input matInput (keyup)="applyFilter($event)" placeholder="Ex. Mia" #input>
</mat-form-field>
和函数applyFilter
applyFilter(event: Event) {
const filterValue = (event.target as HTMLInputElement).value;
this.dataSource.filter = filterValue.trim().toLowerCase();
if (this.dataSource.paginator) {
this.dataSource.paginator.firstPage();
setTimeout(() => {
this.paginator.initPageRange();
});
}
}
需要在 setTimeout 中包含函数 initPAgeRange 以在 Angular 刷新应用程序后执行