angularjs实现的前端分页控件示例


Posted in Javascript onFebruary 10, 2017

前言:之前写个一个jQuery的分页显示插件,存在许多的bug,现在由于业务需要,学习的一点AngularJS,重新用angularjs实现了这个分页插件

实现效果图:

(效果图是加上了bootstrap的css文件)

angularjs实现的前端分页控件示例

用法:

angular-pagination.js代码:

/**
 * angularjs分页控件
 * Created by CHEN on 2016/11/1.
 */

angular.module('myModule', []).directive('myPagination', function () {
  return {
    restrict: 'EA',
    replace: true,
    scope: {
      option: '=pageOption'
    },
    template: '<ul class="pagination">' +
    '<li ng-click="pageClick(p)" ng-repeat="p in page" class="{{option.curr==p?\'active\':\'\'}}">' +
    '<a href="javascript:;" rel="external nofollow" >{{p}}</a>' +
    '</li>' +
    '</ul>',
    link: function ($scope) {
      //容错处理
      if (!$scope.option.curr || isNaN($scope.option.curr) || $scope.option.curr < 1) $scope.option.curr = 1;
      if (!$scope.option.all || isNaN($scope.option.all) || $scope.option.all < 1) $scope.option.all = 1;
      if ($scope.option.curr > $scope.option.all) $scope.option.curr = $scope.option.all;
      if (!$scope.option.count || isNaN($scope.option.count) || $scope.option.count < 1) $scope.option.count = 10;


      //得到显示页数的数组
      $scope.page = getRange($scope.option.curr, $scope.option.all, $scope.option.count);

      //绑定点击事件
      $scope.pageClick = function (page) {
        if (page == '«') {
          page = parseInt($scope.option.curr) - 1;
        } else if (page == '»') {
          page = parseInt($scope.option.curr) + 1;
        }
        if (page < 1) page = 1;
        else if (page > $scope.option.all) page = $scope.option.all;
        //点击相同的页数 不执行点击事件
        if (page == $scope.option.curr) return;
        if ($scope.option.click && typeof $scope.option.click === 'function') {
          $scope.option.click(page);
          $scope.option.curr = page;
          $scope.page = getRange($scope.option.curr, $scope.option.all, $scope.option.count);
        }
      };

      //返回页数范围(用来遍历)
      function getRange(curr, all, count) {
        //计算显示的页数
        curr = parseInt(curr);
        all = parseInt(all);
        count = parseInt(count);
        var from = curr - parseInt(count / 2);
        var to = curr + parseInt(count / 2) + (count % 2) - 1;
        //显示的页数容处理
        if (from <= 0) {
          from = 1;
          to = from + count - 1;
          if (to > all) {
            to = all;
          }
        }
        if (to > all) {
          to = all;
          from = to - count + 1;
          if (from <= 0) {
            from = 1;
          }
        }
        var range = [];
        for (var i = from; i <= to; i++) {
          range.push(i);
        }
        range.push('»');
        range.unshift('«');
        return range;
      }

    }
  }
});

index.html代码:

<!doctype html>
<html ng-app="app">
<head>
  <meta charset="UTF-8">
  <title>Angularjs分页控件</title>
  <script src="angular.min.js"></script> <!-- 引入angularjs文件,而且是1.x版本的 -->
  <script src="angular-pagination.js"></script> <!-- 引入angularjs分页控件 -->
  <script src="app.js"></script> <!-- 引入app.js -->
</head>
<body>

<!-- 控制器 -->
<div ng-controller="myCtrl">

  <!-- 分页控件指令 ,可以是元素 或者 属性 -->
  <my-pagination page-option="option"></my-pagination>

</div>

</body>
</html>

app.js代码:

//引入 'myModele' 模块
var app = angular.module('app', ['myModule']);

app.contriller('myCtrl', function($scope){

  //设置分页的参数
  $scope.option = {
    curr: 1, //当前页数
    all: 20, //总页数
    count: 10, //最多显示的页数,默认为10

    //点击页数的回调函数,参数page为点击的页数
    click: function (page) {
      console.log(page);
      //这里可以写跳转到某个页面等...
    }
  }
});

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

Javascript 相关文章推荐
js防止表单重复提交实现代码
Sep 05 Javascript
浅谈JavaScript字符集
May 22 Javascript
JavaScript获取网页表单提交方式的方法
Apr 02 Javascript
jQuery实现宽屏图片轮播实例教程
Nov 24 Javascript
js实现select二级联动下拉菜单
Apr 17 Javascript
Angular2平滑升级到Angular4的步骤详解
Mar 29 Javascript
新手vue构建单页面应用实例代码
Sep 18 Javascript
Angular 5.x 学习笔记之Router(路由)应用
Apr 08 Javascript
优化Vue项目编译文件大小的方法步骤
May 27 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
Sep 04 Javascript
js实现简单页面全屏
Sep 17 Javascript
javascript实现电商放大镜效果
Nov 23 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
Feb 10 #Javascript
jQuery html表格排序插件tablesorter使用方法详解
Feb 10 #Javascript
简单的vue-resourse获取json并应用到模板示例
Feb 10 #Javascript
jQuery排序插件tableSorter使用方法
Feb 10 #Javascript
详解angularjs结合pagination插件实现分页功能
Feb 10 #Javascript
js仿QQ邮箱收件人选择与搜索功能
Feb 10 #Javascript
BootStrapValidator初使用教程详解
Feb 10 #Javascript
You might like
转换中文日期的PHP程序
2006/10/09 PHP
使用php shell命令合并图片的代码
2011/06/23 PHP
php简单浏览目录内容的实现代码
2013/06/07 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
javascript中tostring()和valueof()的用法及两者的区别
2015/11/16 Javascript
jQuery实现三级菜单的代码
2016/05/09 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
详解js获取video任意时间的画面截图
2019/04/17 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
Python实现截屏的函数
2015/07/26 Python
Python注释详解
2016/06/01 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
Python查看微信撤回消息代码
2018/06/07 Python
对python调用RPC接口的实例详解
2019/01/03 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
Python 求向量的余弦值操作
2021/03/04 Python
Nike德国官网:Nike.com (DE)
2018/11/13 全球购物
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
讲文明树新风演讲稿
2014/05/12 职场文书
十佳党员事迹材料
2014/08/28 职场文书
本溪关门山导游词
2015/02/09 职场文书
硕士论文致谢范文
2015/05/14 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书
2016教师节问候语
2015/11/10 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
Log4j.properties配置及其使用
2021/08/02 Java/Android
Pillow图像处理库安装及使用
2022/04/12 Python