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 相关文章推荐
用js实现随机返回数组的一个元素
Aug 13 Javascript
jquery实现点击弹出层效果的简单实例
Mar 03 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
Nov 28 Javascript
JavaScript function函数种类详解
Feb 22 Javascript
JQuery validate插件验证用户注册信息
May 11 Javascript
javascript中递归的两种写法
Jan 17 Javascript
vue cli构建的项目中请求代理与项目打包问题
Feb 26 Javascript
vue多次循环操作示例
Feb 08 Javascript
发布订阅模式在vue中的实际运用实例详解
Jun 09 Javascript
JavaScript setInterval()与setTimeout()计时器
Dec 27 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
Mar 03 Javascript
JavaScript组合继承详解
Nov 07 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
php 移除数组重复元素的一点说明
2008/11/27 PHP
php设计模式 Interpreter(解释器模式)
2011/06/26 PHP
php保存任意网络图片到服务器的方法
2015/04/14 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
node 版本切换的实现
2020/02/02 Javascript
总结Python中逻辑运算符的使用
2015/05/13 Python
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
Python 定义只读属性的实现方式
2020/03/05 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
财产分割协议书
2016/03/22 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
《文化苦旅》读后感:阅读,让人诗意地栖居在大地上
2019/12/24 职场文书