Angular2 PrimeNG源码学习
Paginator分页组件
首先分析一下分页功能的需求:
- 由父组件传入数据总数量,每页显示数量,可自定义初始页
- 由父组件传入分页按钮个数
- 有第一页,上一页,下一页,最后一页按钮
- 可在页面选择性更改每页显示数量
HTML模板代码: 部分代码片段
第一页按钮:
这段代码涉及几个事件。 1.鼠标移入移出更改hoveredItem变量,并以此更改样式 2.点击click事件,调用changePageToFirst(event)处理
分页按钮:
分页按钮是通过*ngFor从分页按钮数组中循环出来的,所以我们需要去确定这个数组
下面处理数组,和各个按钮的事件
//获取当前页,0为第一页
getPage(): number {
return Math.floor(this.first / this.rows);
}
//是否为第一页
isFirstPage(): boolean {
return this.getPage() === 0;
}
//是否为最后一页
isLastPage(): boolean {
return this.getPage() === this.getPageCount() - 1;
}
const delta = this.pageLinkSize - (end - start + 1);
start = Math.max(0,start - delta);
return [start,end];
}
//更新需要显示的分页条目
updatePageLinks(): void {
this.pageLinks = [];
let boundaries = this.calculatePageLinkBoundaries;
const start = boundaries[0];
const end = boundaries[1];
for (let i = start; i <= end; i++) {
this.pageLinks.push(i + 1);
}
}
//点击分页
changePage(p: number,event) {
var pageCount = this.getPageCount();
if (p > 0 && p < pageCount) {
this.first = this.rows * p;
const state = {
page: p,first: this.first,rows: this.rows,pageCount: pageCount
};
this.updatePageLinks();
this.onPageChange.emit(state);
}
if (event) {
event.preventDefault();
}
}
changePageToPrev(event){
this.changePage(this.getPage() - 1,event);
}
//下一页
changePageToNext(event){
this.changePage(this.getPage() + 1,event);
}
//最后一页
changePageToLast(event){
this.changePage(this.getPageCount() - 1,event);
}
//通过下拉菜单更改每页显示数量
onRppChange(event){
this.rows = this.rowsPerPageOptions[event.target.selectedIndex];
this.changePageToFirst(event);
}