基本思路

一开始页码为1,Service向服务器端获取对应信息;点击上/下一页/跳转,通过对应的页码向服务器端获取对应的信息。

由于后台暂时没弄好,我实现的过程中直接读取准备好的JSON文件,通过页码获取对应的信息段并通过ng-repeat在页面显示具体信息。

展示

一开始直接在Controller中实现分页的功能代码

CSS部分

  1. /**
  2. * Pagination
  3. */
  4. .pagination{
  5. margin: 40px auto 20px auto;
  6. }
  7.  
  8. .pagination ul{
  9. width: 500px;
  10. }
  11.  
  12. .pagination-btn-group{
  13. float: left;
  14. margin-left: 40px;
  15. }
  16.  
  17. .pagination-btn-group:after{
  18. display: table;
  19. content: " ";
  20. clear: both;
  21. }
  22.  
  23. .pagination ul li:hover,.pagination-btn-group div:hover{
  24. cursor: pointer;
  25. background-color: #B6B6B6;
  26. color: #EBEBEB;
  27. }
  28.  
  29. .pagination-btn,.pagination-input,.pagination-next,.pagination-jmp,.pagination-prev{
  30. display: block;
  31. float: left;
  32. height: 36px;
  33. text-align: center;
  34. margin-right: 8px;
  35. border-radius: 5px;
  36. margin-bottom: 40px;
  37. }
  38. .pagination-btn,.pagination-jmp{
  39. background-color: #EBEBEB;
  40. color: #B6B6B6;
  41. line-height: 36px;
  42. width: 60px;
  43. }
  44.  
  45. .pagination-input{
  46. border-style: solid;
  47. border-color: #B6B6B6;
  48. border-width: 1px;
  49. width: 60px;
  50. }
  51.  
  52. .pagination-next,.pagination-prev{
  53. width: 80px;
  54. background-color: #EBEBEB;
  55. color: #B6B6B6;
  56. line-height: 36px;
  57. }
  58.  
  59. .active{
  60. background-color: #B6B6B6;
  61. color: #EBEBEB;
  62. }
  63.  
  64. .disabled{
  65. display: none;
  66. }
  67. /*end of pagination*/

HTML部分

  1. <div class="pagination">
  2. <ul>
  3. <li class="pagination-btn" ng-class="{true:'active'}[currentPage == page]" ng-repeat="page in pages" ng-click="selectPage(page)">
  4. {{page}}
  5. </li>
  6. <input class="pagination-input" ng-model="destPage">
  7. <li class="pagination-jmp" ng-click="skipPage()">跳转</li>
  8. </ul>
  9. <div class="pagination-btn-group">
  10. <div class="pagination-prev" ng-click="prevPage()" ng-class="{true:'disabled'}[currentPage == 1]">&lt;上一页</div>
  11. <div class="pagination-next" ng-click="nextPage()" ng-class="{true:'disabled'}[currentPage == endPage]">下一页&gt;</div>
  12. </div>
  13. </div>

ng-class="{true:'active'}[currentPage == page]" 表示当page为当前页面时应用.active的CSS样式

在angular中为我们提供了3种方案处理class:

1.scope变量绑定

  如:<div class=”{{test}}”></div> 然后在Controller中设置$scope.test值,不推荐使用,Controller中应该放业务逻辑部分,Service与服务器交互,Directive与页面交互

2.字符串数组形式

  形如:<div ng-class="{true: 'active', false: 'inactive'}[expression]"> expression为true,则active;否则inactive

3.对象key/value处理

  形如:<div ng-class {'selected': isSelected, 'car': isCar}"> isSelected为true,增加.selected样式;isCar为true,增加car样式

功能部分

  1. $scope.loadPagination = function() {
  2. $scope.pages = [];
  3. var i,j;
  4.  
  5. if($scope.currentPage == "1..."){
  6. $scope.currentPage = 1;
  7. }else if($scope.currentPage == "..." + $scope.endPage){
  8. $scope.currentPage = $scope.endPage;
  9. }
  10.  
  11. if(($scope.endPage <= 5) || ($scope.currentPage <= 3)){
  12. $scope.pages[0] = 1;
  13. for(i = 1;i < 5;i++){
  14. if(i == $scope.endPage)
  15. break;
  16. $scope.pages[i] = i + 1;
  17. }
  18. if(i < $scope.endPage){
  19. $scope.pages[4] = "..." + $scope.endPage;
  20. }
  21. }else if($scope.currentPage <= $scope.endPage-3){
  22. $scope.pages[0] = "1...";
  23. $scope.pages[1] = $scope.currentPage - 1;
  24. $scope.pages[2] = $scope.currentPage;
  25. $scope.pages[3] = $scope.currentPage + 1;
  26. $scope.pages[4] = "..." + $scope.endPage;
  27. }else{
  28. $scope.pages[0] = "1...";
  29. $scope.pages[1] = $scope.endPage - 3;
  30. $scope.pages[2] = $scope.endPage - 2;
  31. $scope.pages[3] = $scope.endPage - 1;
  32. $scope.pages[4] = $scope.endPage;
  33. }
  34.  
  35. var start=($scope.currentPage - 1) * $scope.pageSize;
  36. var end=$scope.currentPage * $scope.pageSize;
  37. $scope.dialogList = $scope.realDialogList.slice(start,end);
  38. };
  39.  
  40. $scope.prevPage = function() {
  41. $scope.currentPage -= 1;
  42. $scope.loadPagination();
  43. };
  44.  
  45. $scope.nextPage = function() {
  46. $scope.currentPage += 1;
  47. $scope.loadPagination();
  48. };
  49.  
  50. $scope.skipPage = function() {
  51. var destPage=Number($scope.destPage);
  52. $scope.destPage = "";
  53. if(isNaN(destPage) || destPage <= 0 || destPage > $scope.endPage){
  54. return ;
  55. }
  56. $scope.currentPage = destPage;
  57. $scope.loadPagination();
  58. };
  59.  
  60. $scope.selectPage = function(selected) {
  61. $scope.currentPage=selected;
  62. $scope.loadPagination();
  63. };

$scope.realDialogList为Service获取的JSON信息,$scope.dialogList为要展示在页面上的信息

这里关键就是loadPagination(),我的思路是设置5个按钮的分页,第一个按钮作为首页链接,最后一个按钮作为末页链接,剩下三个按钮,将当前页码设置为中间按钮 。

根据分页栏首/末页按钮数字分为三种状态:

  1. 首页为'1',此时 页码<=3 或 末页<=5,当末页>5时,设置为'...X'

  2. 首页为'1...',末页为'...X',此时 页码<=末页-3

  3. 首页位'1...',末页为‘X',其他情况

代码:http://pan.baidu.com/s/1hqEZi0s

推荐将分页写成Directive

AngularJS分页实现的更多相关文章

  1. 自定义angularjs分页控件

    继昨天写了knockoutjs+ jquery pagination+asp.net web Api 实现无刷新列表页 ,正好最近刚学习angularjs ,故琢磨着写一个angularjs版本的分页 ...

  2. AngularJS 分页

    前端源码: <div> <h1>列表页33</h1> <table> <thead> <tr><td>CandiID ...

  3. angularjs 分页精华代码

    //pageinfo $scope.pageSize=10;$scope.currentType={{ current_type }};$scope.currentPage={{ json_encod ...

  4. Angularjs 分页控件

    实现效果: 实现步骤: 1.分页页面:page.html,页面多余样式,需要自己去除. <div class="row" ng-show="conf.totalIt ...

  5. angularjs分页组件

    这是我第一次写博客,激动,首先,我也是个菜鸟,分享一下自己写的服务器端分页的代码,自己一步一步写的,其中也有参考别人的代码.技术比较渣,先这样了. // ====== 2019-1-3 ======/ ...

  6. 前端使用AngularJS的$resource,后端ASP.NET Web API,实现分页、过滤

    在上一篇中实现了增删改查,本篇实现分页和过滤. 本系列包括: 1.前端使用AngularJS的$resource,后端ASP.NET Web API,实现增删改查2.前端使用AngularJS的$re ...

  7. Angularjs 跳转页面并传递参数的方法总结

    http://www.zhihu.com/question/33565135 http://www.codeproject.com/Articles/1073780/ASP-NET-MVC-CRUD- ...

  8. angular.js分页代码的实例

    对于大多数web应用来说显示项目列表是一种很常见的任务.通常情况下,我们的数据会比较多,无法很好地显示在单个页面中.在这种情况下,我们需要把数据以页的方式来展示,同时带有转到上一页和下一页的功能.现在 ...

  9. 有了jsRender,妈妈再也不用担心我用jq拼接DOM拼接的一团糟了、页面整齐了、其他伙伴读代码也不那么费劲了

    写在前面 说来也很巧, 下午再做一个页面,再普通不过的分页列表,我还是像往常一样,基于MVC环境下,我正常用PagedList.MVC AJAX做无刷新分页,这时候问题就来了,列表数据中有个轮播图用到 ...

随机推荐

  1. explicit构造函数的作用

    explicit构造函数是用来防止隐式转换的.请看下面的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...

  2. jvm 之 国际酒店 8 月 19 一次full GC 导致的事故

    事故经过: 1  15:18收到短信报警:国际酒店调用OMS queryGorderOrderList方法失败:成单接口调用OMS获取token失败. 2  查看checkList发现15:18开始发 ...

  3. HashMap的key装换成List

    Map<String,Object> map = new HashMap<String,Object>(); map.put("a","32332 ...

  4. hdu 4726 Kia's Calculation

    思路:刚开始想复杂了. 看解题报告后才知道这题挺简单的,看来还是要多训练啊!!! 单独处理首位的数字,不能为0.其他的就好处理了,从大到小依次找下去就可以了…… 代码如下: #include<i ...

  5. WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计

    上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依 ...

  6. centOS学习part1:操作系统安装

    0 linux作为服务器的主要操作系统,在处理速度以及安全性上都要优于windows,虽然需要很多命令要记,但是一般常用的命令不多,用多了就熟悉了,而且现在很多都要图形界面,也降低了学习成本. cen ...

  7. 读取本地excel发短信

    package com.cmcc.zysoft.sellmanager.controller; import java.io.File; import java.io.FileInputStream; ...

  8. Java7编程高手进阶读书笔记--final学习

    这段时间终于有了一些自己的时间,在网上淘了一本书把java学习下,顺便记下每日的学习心得 工作快两年多了,才知道基础的东西永远看的时候都有一个新的体验,今天中午看了下final,把自己炒的代码贴在这以 ...

  9. kill -9 和kill

    kill pid 在kill进程的同时,会将包删掉该进程所在webapps目录下的文件夹,如iexpense文件夹 kill -9 pid 会强制删掉进程,但是不是删掉该进程所在webapps目录下的 ...

  10. Ibm-jQuery教程学习笔记

    一.概述 1.虽然 jQuery 本身并非一门新的语言.但是,学习其语法有助于我们熟练.灵活地使用它.回顾下我们熟悉的 CSS 语法,不难发现 jQuery 的语法与 CSS 有相似之处. jQuer ...