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 相关文章推荐
基于json的jquery地区联动效果代码
Jul 06 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
Sep 29 Javascript
纯js分页代码(简洁实用)
Nov 05 Javascript
javascript实现textarea中tab键的缩排处理方法
Jun 26 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
Jun 23 Javascript
JavaScript闭包和范围实例详解
Dec 19 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
Mar 30 Javascript
JavaScript中 DOM操作方法小结
Apr 25 Javascript
vue中动态绑定表单元素的属性方法
Feb 23 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
Apr 22 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
Nov 19 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
Sep 05 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 中英文语言转换类代码
2011/08/11 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
2014/01/14 PHP
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
2015/03/04 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
bootstrap日期控件问题(双日期、清空等问题解决)
2017/04/19 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
微信小程序实现图片上传
2019/05/23 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
简单了解JavaScript sort方法
2019/11/25 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
在Python中处理XML的教程
2015/04/29 Python
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
python爬虫入门教程--优雅的HTTP库requests(二)
2017/05/25 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
基于pandas中expand的作用详解
2019/12/17 Python
python中xlrd模块的使用详解
2021/02/01 Python
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
Seavenger官网:潜水服、浮潜、靴子和袜子
2020/03/05 全球购物
工商管理专业学生的自我评价
2013/10/01 职场文书
2014年五四青年节活动方案
2014/03/29 职场文书
政风行风建设责任书
2014/07/23 职场文书
学生安全责任书范本
2014/07/24 职场文书
经营目标责任书
2015/05/08 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
团拜会主持词
2015/07/04 职场文书
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis