全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Angular2 PrimeNG分页模块学习

Angular2 PrimeNG源码学习

Paginator分页组件

GITHUB地址

首先分析一下分页功能的需求:

  1. 由父组件传入数据总数量,每页显示数量,可自定义初始页
  2. 由父组件传入分页按钮个数
  3. 有第一页,上一页,下一页,最后一页按钮
  4. 可在页面选择性更改每页显示数量

HTML模板代码:
部分代码片段

第一页按钮:

复制代码 代码如下: <a href="#" #firstlink class="ui-paginator-first ui-paginator-element ui-state-default ui-corner-all" (mouseenter)="hoveredItem = $event.target" (mouseleave)="hoveredItem = null" (click)="changePageToFirst($event)" [ngClass]="{'ui-state-disabled':isFirstPage(), 'ui-state-hover':(firstlink === hoveredItem && !isFirstPage())}" [tabindex]="isFirstPage() ? -1 : null"> <span class="fa fa-step-backward"></span> </a> 

这段代码涉及几个事件。
1.鼠标移入移出更改hoveredItem变量,并以此更改样式
2.点击click事件,调用changePageToFirst(event)处理

上一页,下一页,最后一页和第一页类似

分页按钮:

复制代码 代码如下:<span class="ui-paginator-pages">
     <a href="#" #plink *ngFor="let pageLink of pageLinks" class="ui-paginator-page ui-paginator-element ui-state-default ui-corner-all"(mouseenter)="hoveredItem = $event.target" (mouseleave)="hoveredItem = null" (click)="changePage(pageLink - 1, $event)"
     [ngClass]="{'ui-state-hover':(plink === hoveredItem), 'ui-state-active': (pageLink-1 == getPage())}">{{pageLink}}
     </a>
 </span> 

分页按钮是通过*ngFor从分页按钮数组中循环出来的,所以我们需要去确定这个数组

下面处理数组,和各个按钮的事件

//每页显示条目,默认0
@Input() rows: number = 0;
//显示分页按钮数量,默认5
@Input() pageLinkSize: number = 5;
//点击按钮后向父组件发送事件
@Output() onPageChange: EventEmitter<any> = new EventEmitter();
//调整每页显示条目数量的下拉菜单
@Input() rowsPerPageOptions: number[];
//定义分页按钮
pageLinks: number[];
_totalRecords: number = 0;
_first: number = 0;
//数据总数
@Input() get totalRecords(): number {
 return this._totalRecords;
}
set totalRecords(val: number) {
 this._totalRecords = val;
 this.updatePageLinks();
}
//高亮按钮位置
@Input() get first(): number {
 return this._first;
}
set first(val: number) {
 this._first = val;
 this.updatePageLinks();
}
 //获取一共多少页
getPageCount() {
 return Math.ceil(this.totalRecords / this.rows) || 1;
}

//获取当前页,0为第一页
getPage(): number {
 return Math.floor(this.first / this.rows);
}

//是否为第一页
isFirstPage(): boolean {
 return this.getPage() === 0;
}

//是否为最后一页
isLastPage(): boolean {
 return this.getPage() === this.getPageCount() - 1;
}

//确定当先需要显示的起始分页和结束分页
calculatePageLinkBoundaries() {
 let numberOfPages = this.getPageCount();
 let visiblePages = Math.min(this.pageLinkSize, numberOfPages);
 let start = Math.max(0, Math.ceil(this.getPage() - (visiblePages / 2)));
 let end = Math.min(numberOfPages - 1, start + visiblePages - 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();
 }
}

//第一页
changePageToFirst(event){
 this.changePage(0,event);
}

//上一页
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);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Angular2  # PrimeNG分页  # Paginator分页组件  # Angular2分页  # Angular2自定义分页组件  # 分页  # 每页  # 第一页  # 下一页  # 上一页  # 几个  # 鼠标  # 这段  # 可在  # 自定义  # 大家多多  # 后向  # 组中  # 移出  # 当前页  # disabled  # ngClass  # changePageToFirst  # pages  # null 


相关文章: Python多线程使用规范_线程安全解析【教程】  建站之星代理费用多少?最新价格详情介绍  沈阳制作网站公司排名,沈阳装饰协会官方网站?  英语简历制作免费网站推荐,如何将简历翻译成英文?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  如何快速搭建安全的FTP站点?  存储型VPS适合搭建中小型网站吗?  如何快速搭建FTP站点实现文件共享?  建站之星Pro快速搭建教程:模板选择与功能配置指南  贸易公司网站制作流程,出口贸易网站设计怎么做?  教程网站设计制作软件,怎么创建自己的一个网站?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  安徽网站建设与外贸建站服务专业定制方案  如何通过西部数码建站助手快速创建专业网站?  建站之星如何优化SEO以实现高效排名?  如何用美橙互联一键搭建多站合一网站?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  红河网站制作公司,红河事业单位身份证如何上传?  黑客如何通过漏洞一步步攻陷网站服务器?  css网站制作参考文献有哪些,易聊怎么注册?  建站之星伪静态规则如何正确配置?  如何通过FTP服务器快速搭建网站?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  开源网站制作软件,开源网站什么意思?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  XML的“混合内容”是什么 怎么用DTD或XSD定义  宝塔面板创建网站无法访问?如何快速排查修复?  青岛网站建设如何选择本地服务器?  如何用西部建站助手快速创建专业网站?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  活动邀请函制作网站有哪些,活动邀请函文案?  定制建站流程步骤详解:一站式方案设计与开发指南  深圳网站制作的公司有哪些,dido官方网站?  定制建站如何定义?其核心优势是什么?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  Python lxml的etree和ElementTree有什么区别  行程制作网站有哪些,第三方机票电子行程单怎么开?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何在景安服务器上快速搭建个人网站?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  详解jQuery中基本的动画方法  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  如何在云指建站中生成FTP站点?  如何在搬瓦工VPS快速搭建网站?  山东网站制作公司有哪些,山东大源集团官网?  如何用花生壳三步快速搭建专属网站?  专业网站建设制作报价,网页设计制作要考什么证? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。