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 相关文章推荐
javascript mouseover、mouseout停止事件冒泡的解决方案
Apr 07 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
Apr 26 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
Aug 13 Javascript
Tab切换组件(选项卡功能)实例代码
Nov 21 Javascript
js函数与php函数的区别实例浅析
Jan 12 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
Mar 18 Javascript
标准的js无缝滚动效果
Aug 30 Javascript
Javascript之图片的延迟加载的实例详解
Jul 24 Javascript
使用webpack打包koa2 框架app
Feb 02 Javascript
Vue 实例事件简单示例
Sep 19 Javascript
JS如何在数组指定位置插入元素
Mar 10 Javascript
JS XMLHttpRequest原理与使用方法深入详解
Apr 30 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中$_SERVER的详细参数与说明
2008/07/29 PHP
php操作SVN版本服务器类代码
2011/11/27 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
javascript 面向对象继承
2009/11/26 Javascript
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
jquery实现简单合拢与展开网页面板的方法
2015/09/01 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
快速查询Python文档方法分享
2017/12/27 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
python学习将数据写入文件并保存方法
2020/06/07 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
师范生实习个人的自我评价
2013/09/28 职场文书
会议主持词
2014/03/17 职场文书
关于读书的活动方案
2014/08/14 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
python数字图像处理之对比度与亮度调整示例
2022/06/28 Python