zoukankan      html  css  js  c++  java
  • 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=" 55px;" ng-options="item for item  in pageItmes">' +
                '</select></span>' +
                '</li>' +
                '<li><span><input type="text" style=" 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
          }
    };
  • 相关阅读:
    网鼎杯_2018 _Web_fakebook
    CISCN 2019-ikun
    流浪者-CTF
    wtf.sh-150
    bug-ctf
    EasyRE
    MySQL 存储引擎特性和线程模型
    InnoDB体系结构---物理存储结构
    mysql数据页结构及行格式
    linux系统清理缓存
  • 原文地址:https://www.cnblogs.com/iagw/p/6863752.html
Copyright © 2011-2022 走看看