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 相关文章推荐
iframe的父子窗口之间的对象相互调用基本用法
Sep 03 Javascript
javascript闭包的理解
Apr 01 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
Aug 21 Javascript
浅析JavaScript访问对象属性和方法及区别
Nov 16 Javascript
JS实现添加,替换,删除节点元素的方法
Jun 30 Javascript
JS异步加载的三种实现方式
Mar 16 Javascript
jQuery实现菜单的显示和隐藏功能示例
Jul 24 jQuery
解决vue 引入子组件报错的问题
Sep 06 Javascript
vue component 中引入less文件报错 Module build failed
Apr 17 Javascript
Vue中jsx不完全应用指南小结
Nov 01 Javascript
小程序接口的promise化的实现方法
Dec 11 Javascript
微信小程序用户登录和登录态维护的实现
Dec 10 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压缩html网页代码(清除空格,换行符,制表符,注释标记)
2012/04/02 PHP
ThinkPHP之R方法实例详解
2014/06/20 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
javascript 中的事件委托详解
2016/10/25 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
python分析网页上所有超链接的方法
2015/05/08 Python
详解python发送各类邮件的主要方法
2016/12/22 Python
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
selenium+python环境配置教程详解
2019/05/28 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
小升初自荐信范文
2015/03/05 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
2015年依法行政工作总结
2015/04/29 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书
python中print格式化输出的问题
2021/04/16 Python
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang