angularjs实现的前端分页控件示例

发布时间 - 2026-01-10 22:59:05    点击率:

前言:之前写个一个jQuery的分页显示插件,存在许多的bug,现在由于业务需要,学习的一点AngularJS,重新用angularjs实现了这个分页插件

实现效果图:

(效果图是加上了bootstrap的css文件)

用法:

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);
      //这里可以写跳转到某个页面等...
    }
  }
});

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# angularjs  # 分页控件  # angularjs分页实现  # 前端分页  # JavaScript实现前端分页控件  # Vue.js结合bootstrap实现分页控件  # 基于JS分页控件实现简单美观仿淘宝分页按钮效果  # ANGULARJS中使用JQUERY分页控件  # JS分页控件 可用于无刷新分页  # 原生JS实现分页点击控件  # 分页  # 最多  # 上了  # 遍历  # 绑定  # 回调  # 大家多多  # 跳转到  # 默认为  # 实现了  # replace  # true  # option  # scope  # function  # myPagination  # return  # EA  # restrict  # click 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速登录WAP自助建站平台?  使用C语言编写圣诞表白程序  如何做网站制作流程,*游戏网站怎么搭建?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  Laravel怎么在Controller之外的地方验证数据  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  Laravel如何使用Livewire构建动态组件?(入门代码)  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  SQL查询语句优化的实用方法总结  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  如何在云主机上快速搭建网站?  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Python3.6正式版新特性预览  利用vue写todolist单页应用  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel如何实现模型的全局作用域?(Global Scope示例)  微信小程序 require机制详解及实例代码  桂林网站制作公司有哪些,桂林马拉松怎么报名?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Laravel模型事件有哪些_Laravel Model Event生命周期详解  佛山网站制作系统,佛山企业变更地址网上办理步骤?  如何快速搭建高效WAP手机网站?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  如何确保FTP站点访问权限与数据传输安全?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  详解jQuery中基本的动画方法  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  太平洋网站制作公司,网络用语太平洋是什么意思?  Python面向对象测试方法_mock解析【教程】  如何在企业微信快速生成手机电脑官网?  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  敲碗10年!Mac系列传将迎来「触控与联网」双革新  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  如何在 React 中条件性地遍历数组并渲染元素  网页设计与网站制作内容,怎样注册网站?  如何有效防御Web建站篡改攻击?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  Laravel如何创建自定义Facades?(详细步骤)  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】