AngularJS 前台分页实现的示例代码


Posted in Javascript onJune 07, 2018

考评员查询,因为整体的数据量比较小,所以我们可以将分页放到前台进行处理。

其实分页的原理也很简单,我们根据分页选择的页码数和每页数据条数决定当前显示的是数组中的第多少项到多少项,然后再构造分页的参数传入已有的分页指令。

// 初始化分页参数
$scope.pageParams = {
  size: $stateParams.size,   // 每页数据条数
  page: $stateParams.page,   // 页码数
  last: undefined,       // 是否首页
  first: undefined,       // 是否尾页
  totalPages: undefined,    // 总页数
  totalElements: undefined,   // 总数据条数
  numberOfElements: undefined  // 当前页有几条数据
};

这是我们的分页指令要的数据,所以我们就是两个任务,第一,截取当前页应该显示的数据,第二生成参数传给分页指令。

这是最后实现的CommonService中的公共方法。

/**
 * 重新生成分页参数与分页数据
 * @param {每页数据条数}  size
 * @param {页码数}    page
 * @param {全部数据}   data
 * @param {Function}   callback
 * callback (pageParams, currentPageData)
 * pageParams: 分页的标准
 * currentPageData: 当前页的数据
 */
self.reloadPageParamsAndData = function(size, page, data, callback) {
  // 校验传入的参数
  if (typeof size === 'undefined') {
    throw '未接收到每页数据条数信息';
  }
  if (typeof page === 'undefined') {
    throw '未接收到分页信息';
  }
  if (typeof data === 'undefined') {
    throw '未接收到数据信息';
  }
  // 计算总页数和总数据条数
  var totalPages  = Math.ceil(data.length / size);
  var totalElements = data.length;
  // 计算当前页是否为首页 是否为尾页
  var first = page === 0 ? true : false;
  var last = page === totalPages - 1 ? true : false;
  // 根据分页参数计算当前页应该显示的数据 slice数组元素分割
  var currentPageData = data.slice(0 + page * size, size + page * size);
  // 获取当前页总共有多少条数据
  var numberOfElements = currentPageData.length;

  // 重新生成分页参数
  var pageParams = {
    size: size,             // 每页数据条数
    page: page,             // 页码数
    last: last,             // 是否首页
    first: first,            // 是否尾页
    totalPages: totalPages,       // 总页数
    totalElements: totalElements,    // 总数据条数
    numberOfElements: numberOfElements  // 当前页有几条数据
  };

  // 回调
  if (callback) {
    callback(pageParams, currentPageData);
  }
};

获取当前页数据

获取当前页的数据,我们需要知道每页数据条数,页码数即可对数据进行分割。

var currentPageData = data.slice(0 + page * size, size + page * size);

对数据进行分割,数据应该是从0size,加上page * size就是之前的页数中的数据量。

构建分页参数

// 计算总页数和总数据条数
var totalPages  = Math.ceil(data.length / size);
var totalElements = data.length;
// 计算当前页是否为首页 是否为尾页
var first = page === 0 ? true : false;
var last = page === totalPages - 1 ? true : false;
// 获取当前页总共有多少条数据
var numberOfElements = currentPageData.length;

数据总数除以每页数据条数向上取整得到总页数。

如果页数为0,则为首页;如果页数为总页数减1,则为尾页。

<yunzhi-page reload="reloadByPage" total-pages="pageParams.totalPages" total-elements="pageParams.totalElements" first="pageParams.first" last="pageParams.last" number="pageParams.page" size="pageParams.size" number-of-elements="pageParams.numberOfElements"></yunzhi-page>

AngularJS 前台分页实现的示例代码

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

Javascript 相关文章推荐
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
Nov 03 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
Jun 23 Javascript
使用jQuery模板来展现json数据的代码
Oct 22 Javascript
jquery中动态效果小结
Dec 16 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
May 07 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
Nov 12 Javascript
使用GruntJS构建Web程序之构建篇
Jun 04 Javascript
jQuery zclip插件实现跨浏览器复制功能
Nov 02 Javascript
JS实现获取word文档内容并输出显示到html页面示例
Jun 23 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
May 05 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
Aug 10 Javascript
Vue项目中如何封装axios(统一管理http请求)
May 02 Vue.js
浅谈PDF.js使用心得
Jun 07 #Javascript
vue better scroll 无法滚动的解决方法
Jun 07 #Javascript
vue translate peoject实现在线翻译功能【新手必看】
Jun 07 #Javascript
JavaScript 正则命名分组【推荐】
Jun 07 #Javascript
详解create-react-app 自定义 eslint 配置
Jun 07 #Javascript
vue.js实现标签页切换效果
Jun 07 #Javascript
js数组去重的N种方法(小结)
Jun 07 #Javascript
You might like
PHP Ajax实现页面无刷新发表评论
2007/01/02 PHP
php文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
原生javascript实现图片轮播效果代码
2010/09/03 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
2018/03/03 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
详解如何修改python中字典的键和值
2020/09/29 Python
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
Daisy London官网:英国最大的首饰集团IBB旗下
2019/02/28 全球购物
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
KEEN美国官网:美国人气户外休闲鞋品牌
2021/03/09 全球购物
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
十周年庆典策划方案
2014/06/03 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
初中差生评语
2014/12/29 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers