视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
AngularJS前台分页实现
2020-11-27 19:33:58 责编:小采
文档
 这篇文章主要介绍了关于AngularJS 前台分页实现,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

分页思路

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

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

// 初始化分页参数
$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>

下载本文
显示全文
专题