Angularjs实现分页插件的代码分享

由于最近的一个项目使用的是angularjs1.0的版本,涉及到分页查询数据的功能,后来自己就用自定义指令实现了该功能。现在单独做了个简易的小demo,主要是为了分享自己写的分页功能。注:本实例调用的是真实接口数据。

首先、小demo的目录结构如下:

Angularjs实现分页插件的代码分享

一、代码部分

下面直接把每一个文件的代码贴出来,重点是ListCtrl.js和pageDirective.js:

1、index.html

    Title  <!---->          * {      margin: 0;      padding: 0;    }    .left-menu {      width: 200px;      float: left;      height: 100%;    }    .left-menu ul {      list-style: none;    }    .left-menu ul li {      height: 40px;      line-height: 40px;      background-color: #777;      color: #ddd;      margin-bottom: 5px;      cursor: pointer;    }    .main {      margin-left: 200px;      padding: 10px;    }    .left-menu ul li.active {      background-color: #333;      color: #fff;    }    

顶部区域

  • 首页
  • 列表

登录后复制

2、views/list.html (重要,列表数据的html部分)

  table {    border: 1px solid #000;    border-collapse: collapse;    width: 100%;  }  table th,table td {    border: 1px solid #000;    text-align: center;    height: 30px;  }
ID 昵称 创建时间
{{item.id}} {{item.nickname}} {{item.create_time}}

登录后复制

3、views/home.html

首页区域

百度

登录后复制

4、views/directive/page-directive.html (重要,自定义指令的html部分)

  .page {font-size: 14px;background-color: transparent;}  .page .page-l select {width: 60px;height: 30px;}  .page .page-r {float: right;padding-top: 10px;}  .page .page-r ul {float: left;list-style: none;margin: 0;height: 30px;box-sizing: border-box;}  .page .page-r ul li {float: left;list-style: none;height: 100%;line-height: 30px;border: 1px solid #ccc;border-right: 0 none;box-sizing: border-box;}  .page .page-r ul li:hover {background-color: #e2e2e2;}  .page .page-r ul li:last-child {border-right: 1px solid #ccc;}  .page .page-r ul li a {text-decoration: none;display: block;height: 100%;padding:0 10px; color: #2A6496;}  .page .page-r ul li a.active {background-color: #428BCA;color: #fff;}  .page .page-r ul li span {display: block;height: 100%;padding:0 10px; color: #2A6496;cursor: pointer;}  .page .page-r ul li span.ellipsis {cursor: default;}

总共 {{pageConfig.totalCount}}

每页显示 10 20 50 100 条

    登录后复制

    5、scripts/app.js

    angular.module('app', ['ui.router', 'app.C', 'app.S', 'app.D']).constant('global',{  //定义全局变量  url:'http://www.baidu.com'});angular.module('app.C', []);angular.module('app.S', []);angular.module('app.D', []);

    登录后复制

    6、scripts/router.js (路由配置)

    var app = angular.module('app').config(['$stateProvider', '$urlRouterProvider',  function ($stateProvider, $urlRouterProvider) {    $urlRouterProvider.otherwise('/home'); //如果没有匹配到,则就让其匹配home    $stateProvider      .state('home',{        url:'/home',        views:{          'main':{            templateUrl:'views/home.html',            controller:'HomeCtrl'          }        }      })      .state('list',{        url:'/list',        views:{          'main':{            templateUrl:'views/list.html',            controller:'ListCtrl'          }        }      })  }]).run(['$rootScope', '$state',  function ($rootScope, $state) {    $rootScope.$on('$stateChangeSuccess',      function(event, toState, toParams, fromState, fromParams) {        console.log($state.current.url);        $rootScope.curUrl = $state.current.url;      })  }])

    登录后复制

    7、scripts/controllers/MenuCtrl.js

    angular.module('app.C').controller('MenuCtrl', ['$scope', '$state',  function ($scope, $state) {    $scope.goState = function (url,params) {      if(!url) {        $state.go('home')      }else{        if(params){          $state.go(url,params)        }else{          $state.go(url)        }      }    }  }])

    登录后复制

    8、scripts/controllers/HomeCtrl.js

    angular.module('app.C').controller('HomeCtrl',['$scope', 'global',  function ($scope, global) {    $scope.url = global.url;  //全局变量  }])9、scripts/controllers/ListCtrl.js (重要部分,列表数据的controller部分)复制代码angular.module('app.C').controller('ListCtrl', ['$scope', '$http',  function ($scope, $http) {    //初始化数据    //分页参数(参数名固定不可变)    $scope.pageConfig = {      // pageSize:10,  //每页条数(不设置时,默认为10)      pageIndex:1,  //当前页码      totalCount:0,  //总记录数      totalPage:0,   //总页码      prevPage:'< 上一页',   //上一页(不设置时,默认为:',   //下一页(不设置时,默认为:>)      firstPage:'<< 首页',   //首页(不设置时,默认为:<>',   //末页(不设置时,默认为:>>)      degeCount:3,       //当前页前后两边可显示的页码个数(不设置时,默认为3)      isShowEllipsis:true  //是否显示省略号不可点击按钮(true:显示,false:不显示)    }    $scope.listData = [];  //列表数据    //请求接口的参数(参数名根据接口文档确定)    $scope.params = {      page: $scope.pageConfig.pageIndex, //当前页码      pageSize: $scope.pageConfig.pageSize,  //每页条数      course_id: 537    }    $scope.getList = function () {      var promise = $http({        method:"post",        url:"http://api.admin.app.mtedu.com/v1/census/course-student-learning-progress",        params:$scope.params,        headers:{Authorization:'Bearer newtask2017'},      }).success(function(res){        if(res.success){          $scope.listData = res.data.list;          $scope.pageConfig.totalCount = res.data.totalCount; //总记录数          $scope.pageConfig.totalPage = Math.ceil($scope.pageConfig.totalCount / $scope.pageConfig.pageSize); //总页数          console.log('总记录数:'+$scope.pageConfig.totalCount+'; 总页数:'+$scope.pageConfig.totalPage+';当前页码:'+$scope.pageConfig.pageIndex);          $scope.$broadcast("initPage")  //调用分页组件里的初始化页码函数        }else{          alert('系统错误');        }      }).error(function(data){        alert('系统错误');      })    }    $scope.getList()    //监听分页组件中的分页点击事件    $scope.$on("clickPage", function(e, m) {      $scope.params.page = $scope.pageConfig.pageIndex;      $scope.params.pageSize = $scope.pageConfig.pageSize;      console.log('pageSize='+$scope.params.pageSize);      $scope.getList();    })  }])

    登录后复制

    10、scripts/directive/pageDirective.js (重要部分,自定义指令的js部分)

    angular.module('app.D').directive('pageDirective',['$rootScope',  function ($rootScope) {    var link = function (scope,elem,attr) {      scope.pageConfig.pageIndex; //当前页码      scope.pageConfig.totalPage; //总页数      scope.pageConfig.totalCount; //总记录数      scope.pageConfig.pageSize = scope.pageConfig.pageSize || 10; //每页条数      var prev = scope.pageConfig.prevPage || ''; //下一页文字      var first = scope.pageConfig.firstPage || '<>'; //末页文字      var degeCount = scope.pageConfig.degeCount || 3; //当前页码两边的页码个数(默认:3)      var isShowEllipsis = scope.pageConfig.isShowEllipsis;  //是否显示省略号不可点击按钮      var ellipsisBtn = isShowEllipsis ? '
  • ...
  • ' : ''; //监听父作用域列表数据获取成功后 scope.$on("initPage", function(e, m) { initPage(scope.pageConfig.totalPage, scope.pageConfig.pageIndex, degeCount) }); function initPage(totalPage, pageIndex, degeCount) { var pageHtml = ''; var tmpHtmlPrev = ''; var tmpHtmlNext = ''; if(pageIndex - degeCount >= degeCount-1 && totalPage - pageIndex >= degeCount+1){ //前后都需要 var count = degeCount; //前后各自需要显示的页码个数 for(var i=0; i<count; i++){ if(pageIndex != 1){ tmpHtmlPrev += '
  • '+(pageIndex-(count-i))+'
  • '; } tmpHtmlNext += '
  • '+((pageIndex-0)+i+1)+'
  • '; } pageHtml = '
  • '+first+'
  • '+ '
  • '+prev+'
  • '+ ellipsisBtn+ tmpHtmlPrev + '
  • '+pageIndex+'
  • '+ tmpHtmlNext + ellipsisBtn+ '
  • '+next+'
  • '+ '
  • '+last+'
  • '; }else if(pageIndex - degeCount >= degeCount-1 && totalPage - pageIndex < degeCount+1) { //前需要,后不需要 var count = degeCount; //前需要显示的页码个数 var countNext = totalPage - pageIndex; //后需要显示的页码个数 if(pageIndex != 1){ for(var i=0; i<count; i++){ tmpHtmlPrev += '
  • '+(pageIndex-(count-i))+'
  • '; } } for(var i=0; i<countNext; i++){ tmpHtmlNext += '
  • '+((pageIndex-0)+i+1)+'
  • '; } pageHtml = '
  • '+first+'
  • '+ '
  • '+prev+'
  • '+ ellipsisBtn+ tmpHtmlPrev + '
  • '+pageIndex+'
  • '+ tmpHtmlNext + '
  • '+next+'
  • '+ '
  • '+last+'
  • '; }else if(pageIndex - degeCount = degeCount+1){ //前不需要,后需要 var countPrev = pageIndex - 1; //前需要显示的页码个数 var count = degeCount; //后需要显示的页码个数 if(pageIndex != 1){ for(var i=0; i<countPrev; i++){ tmpHtmlPrev += '
  • '+(pageIndex-(countPrev-i))+'
  • '; } } for(var i=0; i<count; i++){ tmpHtmlNext += '
  • '+((pageIndex-0)+i+1)+'
  • '; } pageHtml = '
  • '+first+'
  • '+ '
  • '+prev+'
  • '+ tmpHtmlPrev + '
  • '+pageIndex+'
  • '+ tmpHtmlNext + ellipsisBtn+ '
  • '+next+'
  • '+ '
  • '+last+'
  • '; }else if(pageIndex - degeCount < degeCount-1 && totalPage - pageIndex < degeCount+1){ //前后都不需要 var countPrev = pageIndex - 1; //前需要显示的页码个数 var countNext = totalPage - pageIndex; //后需要显示的页码个数 if(pageIndex != 1){ for(var i=0; i<countPrev; i++){ tmpHtmlPrev += '
  • '+(pageIndex-(countPrev-i))+'
  • '; } } for(var i=0; i<countNext; i++){ tmpHtmlNext += '
  • '+((pageIndex-0)+i+1)+'
  • '; } pageHtml = '
  • '+first+'
  • '+ '
  • '+prev+'
  • '+ tmpHtmlPrev + '
  • '+pageIndex+'
  • '+ tmpHtmlNext + '
  • '+next+'
  • '+ '
  • '+last+'
  • '; } document.getElementById('page_ul').innerHTML = pageHtml; } /*点击页码(首页、上一页、下一页、末页)*/ document.getElementById('page_ul').addEventListener('click', function (e) { console.log(456); var _this = e.target; //当前被点击的a标签 var idAttr = _this.id; //id属性 var className = _this.className; //class属性 if(idAttr == 'first_page'){ //如果是点击的首页 scope.pageConfig.pageIndex = 1; }else if(idAttr == 'prev_page'){ //如果点击的是上一页 scope.pageConfig.pageIndex = scope.pageConfig.pageIndex == 1 ? scope.pageConfig.pageIndex : scope.pageConfig.pageIndex - 1 ; }else if(idAttr == 'next_page'){ //如果点击的是下一页 scope.pageConfig.pageIndex = scope.pageConfig.pageIndex == scope.pageConfig.totalPage ? scope.pageConfig.pageIndex : parseInt(scope.pageConfig.pageIndex) + 1; }else if(idAttr == 'last_page'){ //如果点击的是末页 scope.pageConfig.pageIndex = scope.pageConfig.totalPage; }else if(className == 'page-number'){ //如果点击的是数字页码 scope.pageConfig.pageIndex = _this.innerText; } initPage(scope.pageConfig.totalPage, scope.pageConfig.pageIndex, degeCount); scope.$emit('clickPage'); }); /*改变每页条数*/ document.getElementById('page_size').addEventListener('change', function () { var _this = this; scope.pageConfig.pageIndex = 1; scope.pageConfig.pageSize = _this.value - 0; initPage(scope.pageConfig.totalPage, scope.pageConfig.pageIndex, degeCount); scope.$emit('clickPage'); }) /////////////////////////// 以下注释部分是用jQuery写的点击页码部分 ///////////////////////////// /*点击数字页*/ // $('#page_ul').on('click','a',function () { // var _this = $(this); // scope.pageConfig.pageIndex = _this.text(); // initPage(scope.pageConfig.totalPage, scope.pageConfig.pageIndex, degeCount) // scope.$emit('clickPage') // }); /*点击首页*/ // $('#page_ul').on('click','#first_page',function () { // var _this = $(this); // scope.pageConfig.pageIndex = 1; // initPage(scope.pageConfig.totalPage, scope.pageConfig.pageIndex, degeCount) // scope.$emit('clickPage') // }); // /*点击上一页*/ // $('#page_ul').on('click','#prev_page',function () { // var _this = $(this); // scope.pageConfig.pageIndex = scope.pageConfig.pageIndex == 1 ? scope.pageConfig.pageIndex : scope.pageConfig.pageIndex - 1 ; // initPage(scope.pageConfig.totalPage, scope.pageConfig.pageIndex, degeCount) // scope.$emit('clickPage') // }); // /*点击下一页*/ // $('#page_ul').on('click','#next_page',function () { // var _this = $(this); // scope.pageConfig.pageIndex = scope.pageConfig.pageIndex == scope.pageConfig.totalPage ? scope.pageConfig.pageIndex : parseInt(scope.pageConfig.pageIndex) + 1; // initPage(scope.pageConfig.totalPage, scope.pageConfig.pageIndex, degeCount) // scope.$emit('clickPage') // }); // /*点击尾页*/ // $('#page_ul').on('click','#last_page',function () { // var _this = $(this); // scope.pageConfig.pageIndex = scope.pageConfig.totalPage; // initPage(scope.pageConfig.totalPage, scope.pageConfig.pageIndex, degeCount) // scope.$emit('clickPage') // }); /*改变每页条数*/ // $('.page-l').on('change', '#page_size',function () { // var _this = $(this); // scope.pageConfig.pageIndex = 1; // scope.pageConfig.pageSize = _this.val()-0; // initPage(scope.pageConfig.totalPage, scope.pageConfig.pageIndex, degeCount) // scope.$emit('clickPage') // }); }; return { restrict: 'EA', 'scope':{ 'pageConfig':'=', }, templateUrl: 'views/directive/page-directive.html', link: link }; }])

    登录后复制

    二、效果

    Angularjs实现分页插件的代码分享

    Angularjs实现分页插件的代码分享

    Angularjs实现分页插件的代码分享

    Angularjs实现分页插件的代码分享

    Angularjs实现分页插件的代码分享

    相关推荐:

    bootstrap paginator分页插件使用方法

    jQuery Pagination分页插件详解

    angular分页插件

    以上就是Angularjs实现分页插件的代码分享的详细内容,更多请关注【创想鸟】其它相关文章!

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

    发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2787253.html

    (0)
    上一篇 2025年3月8日 18:04:54
    下一篇 2025年2月18日 02:04:56

    AD推荐 黄金广告位招租... 更多推荐

    相关推荐

    • JS实现将html转为pdf功能代码分享

      本文主要和大家介绍js实现的将html转为pdf功能,结合完整实例形式分析了基于浏览器端插件jspdf实现的html格式数据转换成pdf具体操作技巧,需要的朋友可以参考下,希望能帮助到大家。 本文实例讲述了JS实现的将html转为pdf功能…

      2025年3月8日
      200
    • JS实现粘贴板复制功能代码分享

      使用剪贴板是一项基本技能。作为码农都应知道, tab , ctrl/cmd + a , ctrl / cmd + c 以及 ctrl / cmd + v 分别是自动聚焦、复制、粘贴的快捷键。 而对普通用户可能就不太容易了。即使用户知道剪贴板…

      编程技术 2025年3月8日
      200
    • JS中offset和匀速动实例分析

      本文主要和大家介绍javascript动画:offset和匀速动画详解(含轮播图的实现),并把实现代码做了分享,有兴趣的朋友参考下,希望能帮助到大家。 offset简介 我们知道,三大家族包括:offset/scroll/client。今天…

      2025年3月8日 编程技术
      200
    • JavaScript如何获取select下拉框中第一个值

      本文主要和大家介绍javascript实现获取select下拉框中第一个值的方法,涉及javascript针对页面元素属性的相关获取操作技巧,需要的朋友可以参考下,希望能帮助到大家。 1、说明 获取select下拉框中的第一个值 2、实现源…

      2025年3月8日
      200
    • JS命令模式概念与用法分享

      本文主要和大家介绍js设计模式之命令模式概念与用法,简单描述了命令模式的原理、功能并结合javascript实例形式分析了命令模式相关定义与使用技巧,需要的朋友可以参考下,希望能帮助到大家。 客户创建命令;调用者执行该命令;接收者在命令执行…

      2025年3月8日
      200
    • nodejs中Express与Koa2对比实例分享

      express诞生已有时日,是一个简洁而灵活的web开发框架,使用简单而功能强大。koa相对更为年轻,是express框架原班人马基于es6新特性重新开发的敏捷开发框架,现在可谓风头正劲,大有赶超express之势。 1、先说结论 目前没有…

      编程技术 2025年3月8日
      200
    • vue-router的权限控制代码分享

      本文主要和大家介绍vue-router 权限控制的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 最近搭建了公司的后台管理系统, 而且系统还比较庞大, 要实现以下几点: 菜单权限, …

      编程技术 2025年3月8日
      200
    • JavaScript生成随机颜色简单方法

      本文主要和大家介绍javascript实现简单生成随机颜色的方法,涉及javascript随机数与字符串运算及页面元素属性动态操作相关实现技巧,需要的朋友可以参考下,希望能帮助到大家。 如果要做出如下效果,每次刷新网页则产生一种颜色 其实非…

      2025年3月8日
      200
    • JavaScript单击网页任意位置打开新窗口与关闭窗口的实现代码

      在一些不正规的网站,尤其是那些挂满广告的下载站,经常在你点击的下载链接之前,无论你点击网页的任何一处都会弹出新窗口。本文主要和大家介绍javascript实现单击网页任意位置打开新窗口与关闭窗口的方法,涉及javascript窗口的相关操作…

      2025年3月8日
      200
    • AngularJS的$timeout使用代码详解

      本文主要和大家介绍angularjs 的$timeout服务示例代码,需要的朋友可以参考下,希望能帮助到大家。  nbsp;html>var app=angular.module(“myApp”,[]);app.controller(…

      编程技术 2025年3月8日
      200

    发表回复

    登录后才能评论