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 相关文章推荐
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
Nov 30 Javascript
jQuery插件Validate实现自定义表单验证
Jan 18 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
May 30 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
Jul 07 Javascript
javascript实现瀑布流动态加载图片原理
Aug 12 Javascript
Vue.JS入门教程之处理表单
Dec 01 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
May 02 Javascript
你可能不知道的JSON.stringify()详解
Aug 17 Javascript
Vue组件中的data必须是一个function的原因浅析
Sep 03 Javascript
Javascript Dom元素获取和添加详解
Sep 24 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
Nov 12 Javascript
vue项目配置同一局域网可使用ip访问的操作
Oct 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
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
IE8 原生JSON支持
2009/04/13 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
在vue项目中安装使用Mint-UI的方法
2017/12/27 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
javascript操作向表格中动态加载数据
2020/08/27 Javascript
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
python类继承用法实例分析
2015/05/27 Python
详解Python字符串对象的实现
2015/12/24 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
python实现扫雷游戏的示例
2020/10/20 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
韩国商务邀请函
2014/01/14 职场文书
研修第一天随笔感言
2014/02/15 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
工作总结与自我评价
2014/09/18 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang