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 相关文章推荐
Jquery iframe内部出滚动条
Feb 11 Javascript
利用原生JS自动生成文章标题树的实例
Aug 22 Javascript
浅谈sass在vue注意的地方
Aug 10 Javascript
vue-cli实现多页面多路由的示例代码
Jan 30 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
Feb 03 Javascript
js动态设置select下拉菜单的默认选中项实例
Aug 21 Javascript
JSON.stringify()方法讲解
Jan 31 Javascript
vue接入腾讯防水墙代码
May 07 Javascript
vue 弹出遮罩层样式实例
Jul 22 Javascript
Vue.js中使用Vuex实现组件数据共享案例
Jul 31 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
Aug 06 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 Vue.js
用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下通过file_get_contents的代理使用方法
2011/02/16 PHP
PHP简洁函数小结
2011/08/12 PHP
PHP 之Section与Cookie使用总结
2012/09/14 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
PHP闭包定义与使用简单示例
2018/04/13 PHP
javascript AutoScroller 函数类
2009/05/29 Javascript
jQuery使用height()获取高度需要注意的地方
2014/12/13 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
Python求解平方根的方法
2015/03/11 Python
python实现爬取千万淘宝商品的方法
2015/06/30 Python
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
python把1变成01的步骤总结
2019/02/27 Python
python os.fork() 循环输出方法
2019/08/08 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
2019/08/19 Python
解决tensorflow由于未初始化变量而导致的错误问题
2020/01/06 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
写自荐信的七个技巧
2013/10/15 职场文书
小学校本培训方案
2014/06/06 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
2016年教师新年寄语
2015/08/18 职场文书
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android
python playwright之元素定位示例详解
2022/07/23 Python