angularjs中的分页指令

自定义指令

import angular from ‘angular‘;

/**
 * @ngdoc module
 * @name components.page
 * @description 分页directive
 */
export default angular.module(‘pageDirective‘, []).directive(‘ngPage‘, function () {
    return {
        restrict: ‘E‘,
        scope: {
            totalCount: ‘=‘,
            pageSize: ‘=‘,
            param: ‘=‘,
            pageItmes: ‘=‘,
            currentPage: ‘=‘,
            goPage: ‘&‘,
            showMaxPage: ‘@‘,
            GO: ‘@‘
        },
        controller: controller,
        template: templateFunction
    }

    function controller($scope, $element, $attrs) {
        var size = 0;
        $scope.$watch(‘pageSize‘, function (nvalue, ovalue) {
            size = parseInt(nvalue);
            if (typeof(ovalue) !== ‘undefined‘) {
                $scope.currentPage = parseInt(($scope.currentPage - 1) * Number(ovalue) / size) + 1;
            }
            $scope.totalPage = getTotalPages();
        });

        //计算总页数
        var getTotalPages = function () {
            return Math.ceil($scope.totalCount / size);
        };

        //监控总记录条数是否发生变化,如改变,需要重新计算页数
        $scope.$watch(‘totalCount‘, function () {
            $scope.totalPage = getTotalPages();
            if ($scope.totalPage == undefined || isNaN($scope.totalPage)) {
                $scope.totalPage = 1
            }
        });

        //监控总页数,调整展示页码
        $scope.$watch(‘totalPage‘, function () {
            $scope.pages = getPages($scope.totalPage, $scope.currentPage);
        });

        //监控跳转的页数只能为数字
        $scope.$watch(‘GO‘, function () {
            var re = /[^\d]/g;
            if ($scope.GO !== ‘‘ && !re.test($scope.GO) && $scope.GO > 0) {
                $scope.pages = getPages($scope.totalPage, $scope.currentPage);
            } else {
                $scope.GO = ‘‘;
            }
        });

        //监控当前页,然后调整展示页码
        $scope.$watch(‘currentPage‘, function () {
            // debugger;
            $scope.pages = getPages($scope.totalPage, $scope.currentPage);
        });

        //跳转到某一页
        $scope.setCurrentPage = function (pageno) {
            if (pageno === ‘...‘ || pageno === 0 || pageno > $scope.totalPage || pageno === ‘‘) {
                return;
            }
            $scope.currentPage = pageno;
            $scope.param.page.currentPage = pageno;
            $scope.goPage($scope.param);
            $scope.GO = ‘‘;
        };

        //每页显示size改变
        $scope.changeSize = function () {
            $scope.param.page = {
                currentPage: 1,
                pageSize: $scope.pageSize
            };
            $scope.goPage($scope.param);
        };

        var getPages = function (totalPage, currentPage) {
            var pages = [];
            currentPage = parseInt(currentPage);
            totalPage = parseInt(totalPage);
            if (totalPage === 0) {
                pages.push(1);
            }
            //总页数<最大展示页数:展示全部
            else if (totalPage <= $attrs.showMaxPage) {
                for (var i = 1; i <= totalPage; i++) {
                    pages.push(i);
                }
            }
            //当前页靠近首页前4页,显示:首页前4页,..., 尾页后2页
            else if (totalPage > $attrs.showMaxPage && currentPage <= 4) {
                pages.push(1);
                pages.push(2);
                pages.push(3);
                pages.push(4);
                pages.push("...");
                pages.push(totalPage - 1);
                pages.push(totalPage);
            }
            // 当前页靠近尾页后4页,显示
            else if (totalPage > $attrs.showMaxPage && (totalPage - currentPage) < 4) {
                pages.push(1);
                pages.push(2);
                pages.push("...");
                pages.push(totalPage - 3);
                pages.push(totalPage - 2);
                pages.push(totalPage - 1);
                pages.push(totalPage);
            }
            //当前页既不靠近首页前4页也不靠近尾页后4页,
            else {
                pages.push(1);
                pages.push(2);
                pages.push("...");
                pages.push(currentPage - 1);
                pages.push(currentPage);
                pages.push(currentPage + 1);
                pages.push("...");
                pages.push(totalPage);
            }
            return pages;
        };
    }

    function templateFunction() {
        return ‘<nav>‘ +
            ‘<ul class="pagination pagination-sm" style="font-size:15px;">‘ +
            ‘<li><a ng-click="setCurrentPage(currentPage-1)" style="font-size:13px;">&laquo;</a></li>‘ +
            ‘<li ng-class="{active: pageno == currentPage}" ng-repeat="pageno in pages" style="font-size:13px;">‘ +
            ‘<a ng-click="setCurrentPage(pageno)">{{pageno}}</a></li>‘ +
            ‘<li><a ng-click="setCurrentPage(currentPage-0+1)" style="font-size:13px;">&raquo;</a></li>‘ +
            ‘<li><span>每页‘ +
            ‘<select ng-model="pageSize" ng-change="changeSize()" style="width: 55px;" ng-options="item for item  in pageItmes">‘ +
            ‘</select></span>‘ +
            ‘</li>‘ +
            ‘<li><span><input type="text" style="width: 30px;" ng-model="GO"/></span></li>‘ +
            ‘<li><a ng-disabled="false" class="ng-binding" ng-click="setCurrentPage(GO)">GO</a></li>‘ +
            ‘</ul>‘ +
            ‘</nav>‘
            ;
    }
}).name;

页面中调用

<page-directive total-count="param.page.totalCount" page-size="param.page.pageSize" param="param"
           page-itmes="param.selectCount" show-max-page="9" current-page="param.page.currentPage"
           go-page="queryList(param.page.currentPage)"></page-directive>

页面中获取数据的方法是queryList,go-page的时候把currentpage作为传递过去即可发送请求,取得想要的结果。

controller中需要传入初始化的数据

//初始化分页信息
$scope.param = {
   selectCount: [5, 10, 15],
      page: {
         currentPage: 1,
          pageSize: 5
      }
};
时间: 2024-10-06 00:41:04

angularjs中的分页指令的相关文章

angularJS中自定义验证指令中的$parsers and $formatters

本文翻译自:$parsers and $formatters in Custom Validation Directives in Angular JS 在使用angularJS的应用中,有时候我们需要定义自己的表单验证.自定义验证在angularJS中是通过创建指令来实现的,该指令依赖于ng-model指令,主要是依赖于它的controller. ng-model指令提供2个由函数组成的数组: $parsers 和 $formatters,这些函数用于实现自定义验证逻辑时调用.这两个数组的用途

Angularjs+Bootstrap实现分页指令

本插件的开发目的主要给前端同学使用,本人是专注于后台开发的,对css样式不熟悉,但逼于前端要求做一个共公组件方便日常开发,所以这个插件在样式上可能不适合大部分人,喜欢的拿走吧,不喜欢的也请别喷. 一.使用环境 1.Angularjs  1.x 2.Bootstrap 3 在自己的环境里请自行配置js和css,本文不作这方面的介绍. 二.效果图 效果逻辑: 1.当前页码默认选中高亮状态 2.页码少于等于1,则“上一页”为不可点击状态 3.页码大于等于最大页码,则“下一页”为不可点击状态 4.页码输

深入理解AngularJS中的ng-bind-html指令和$sce服务

angular js的强大之处之一就是他的数据双向绑定这一牛B功能,我们会常常用到的两个东西就是ng-bind和针对form的ng-model.但在我们的项目当中会遇到这样的情况,后台返回的数据中带有各种各样的html标签.如: $scope.currentWork.description = "hello,<br><b>今天我们去哪里?</b>" 我们用ng-bind-html这样的指令来绑定,结果却不是我们想要的.是这样的 hello, 今天我们

AngularJS 中{{}}与ng-bind指令

面试中,有被问题关于{{}}与ng-bind指令的问题,在此,分享下自己的知识点. 在脚本没有加载完成时,用户会看到{{}},界面比较丑陋. 一般的解决方法: 在index.html里面使用ng-bind,其它动态加载进来的内容使用{{}} ng-bind主要就是用户数据的展示.

angularJS中的ng-repeat指令!

ng-repeat 指令: ng-repeat 指令用来遍历一个数组重复创建当前元素: <ul ng-app="myApp" ng-controller="myAppController"> <li ng-repeat="item in userNames track by $index">{{$index}}:{{item}}</li> </ul> <script type="te

AngularJs中的directives(指令)

一.指令的职责   指令的职责是修改DOM结构,并将作用域和DOM连接起来.即指令既要操作DOM,将作用域内的数据绑定到DOM节点上,又要为DOM绑定事件调用作用域内的对应的方法. 二.创建自定义指令 调用自定义指令的4种方式:元素.属性.样式类.注释. 常用的是前两种,实例如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title>

AngularJS中的指令

欢迎大家讨论与指导 : ) 明天天会继续更新本文O(∩_∩)O  前言 当AngularJS中的内置指令不能满足我们的需求,或者当我们需要创建一个能够用于多个AngularJS程序的自包含的功能单元时,我们应该创建自定义指令来满足需求.  一.创建自定义指令   一 . 1 命名规则  我们要在创建指令时使用峰驼式命名,例如指令是 <div unordered-list></div>  在声明指令时我们需要这样子写 app.directive("unorderedList

angularJS中的ng-show、ng-if指令

angularJS中的ng-show.ng-hide.ng-if指令都可以用来控制dom元素的显示或隐藏. 1. ng-show和ng-hide 根据所给表达式的值来显示或隐藏HTML元素.元素会渲染出来,只是通过css隐藏了. 即DOM中会存在, 通过选择符可以获取到此元素的. 2.ng-if指令 可以根据表达式的值在DOM中生成或移除一个元素.如果赋值给ng-if的表达式的值是false,那对应的元素将会从DOM中移除(DOM中不会存在, 通过选择符无法选择到),否则生成一个新的元素插入DO

angularJS中自定义指令

学习了angularJS一周,但是大部分时间被自定义指令占用了.博主表示自学互联网好心塞的,发现问题的视觉很狭窄,这比解决问题要更难.这篇文章首先介绍了自定义,然后介绍了在使用自定义指令遇到的问题. 代码模板: var myModule = angular.module("myModule",[]); myModule.directive('directiveName',function(){ return{ restrict:string, template:string, temp