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判断两个元素是否有重叠部分的代码
Jul 25 Javascript
js友好的时间返回函数
Aug 24 Javascript
JS锚点的设置与使用方法
Sep 05 Javascript
通过bootstrap全面学习less
Nov 09 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
Nov 25 Javascript
读Javascript高性能编程重点笔记
Dec 21 Javascript
js实现五星评价功能
Mar 08 Javascript
解决webpack -p压缩打包react报语法错误的方法
Jul 03 Javascript
ES6中的Promise代码详解
Oct 09 Javascript
一个简易时钟效果js实现代码
Mar 25 Javascript
vue2.0 computed 计算list循环后累加值的实例
Mar 07 Javascript
echarts多条折线图动态分层的实现方法
May 24 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获得当前的脚本网址
2007/12/10 PHP
深入PHP运行环境配置的详解
2013/06/04 PHP
phpcms手机内容页面添加上一篇和下一篇
2015/06/05 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
PHP文件操作方法汇总
2015/07/01 PHP
phpfpm的作用和用法
2019/10/10 PHP
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
不用MOUSEMOVE也能滑动啊
2007/05/23 Javascript
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
js数组去重的hash方法
2016/12/22 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
angular.fromJson与toJson方法用法示例
2017/05/17 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
vue实例的选项总结
2020/06/09 Javascript
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
2015年行政工作总结范文
2015/04/09 职场文书
学校开除通知书
2015/04/25 职场文书
关于幸福的感言
2015/08/03 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
《司马光》教学反思
2016/02/22 职场文书
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS