angular 分页插件

这两天就要要到分页插件了,在家刚好边学习,边把分页插件写了

具体的github demo地址

好了,开始讲解demo

html中关键的一句就是这个了 <div page-link conf="pagedata"></div>

继续看js中的
  $scope.pagedata={
        url:"aaa.json",
        pageSize:10,
        currentPage:1,
        returnValue:[],
    }这个就是conf的值通过directive的scope的进行相互绑定

在directive中有进行http请求,具体的请求写法,以及参数的配置要根据实际项目而定。这里是直接请求json返回数据的。

返回值放在
$scope.pagedata.returnValue中的可以取到这个值[1,3,3]
{
  "data": {
    "page": {
      "page_total": 100,
      "page_current": 10
    },
    "list": [1, 3, 3]
  }
}

  

<!doctype html>
<html lang="en" ng-app="app">
<head>
    <meta charset="UTF-8">
    <script src="angular.min.js"></script>
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .current{
            color:red;
        }
    </style>
</head>
<body>
<div ng-controller="myCtrl">
<div page-link  conf="pagedata"></div>
</div>
<script src="pagination.js"></script>
</body>
</html>
angular.module(‘app‘,[]).controller(‘myCtrl‘,function($scope){
    $scope.pagedata={
        url:"aaa.json",
        pageSize:10,
        currentPage:1,
        returnValue:[],
    }
}).directive(‘pageLink‘,function($http){
    return {
        restrict: ‘EAMC‘,
        replace: false,
        transclude: true,
        scope:{
            conf:‘=conf‘
        },
        template:
        ‘<ul class="paging">‘ +
        ‘<span class="pagetotal">共<span ng-bind="dataPageCount"></span>条</span>‘ +
        ‘<li ng-if="hasLastPage"><a ng-click="changePage($event,1)"><<</a></li>‘ +
        ‘<li ng-if="hasLastPage"><a ng-click="changePage($event,dataPageNo-1)"><</a></li>‘ +
        ‘<li ng-repeat="pageNumber in pageNumberList" ng-class="{ \‘current\‘:  pageNumber === dataPageNo }"><a ng-click="changePage($event,pageNumber)" ng-bind="pageNumber"></a></li>‘ +
        ‘<li ng-if="hasNextPage"><a ng-click="changePage($event,dataPageNo+1)">></a></li>‘ +
        ‘<li ng-if="hasNextPage"><a ng-click="changePage($event, dataPageCount)">>></a></li>‘ +
        ‘<input type="text" ng-model="pageInputNo" />‘ +
        ‘<button ng-click="pageInputNo <= dataPageCount && changePage($event,pageInputNo)">GO</button>‘ +
        ‘</ul>‘,
        link: function (scope, element) {
            scope.dataUrl = scope.conf.url;
            scope.dataStartPage = scope.conf.currentPage || 1;
            scope.dataPageNo = scope.currentPage || 1;
            scope.pageNumberListLength = 5;
            scope.hasLastPage = false;
            scope.hasNextPage = false;
            //总页数
            scope.dataPageCount = 0;
            scope.pageNumberList = [];
            scope.dataPer = scope.page_size || 10;

            //改变页码
            scope.changePage = function (e, page, p) {
                scope.dataStartPage = page;
                scope.pageData =‘page_size=‘ + scope.dataPer + ‘&page_no=‘+ page;
                $http({//请求个人中心-信息详情接口
                    url: scope.dataUrl,
                    data:scope.pageData,
                    method: ‘POST‘,
                    headers: {‘Content-Type‘: ‘application/x-www-form-urlencoded‘}
                }).success(function(res){
                    scope.conf.returnValue=res.data.list;
                    if (res.data.page) {
                        scope.dataPageCount = parseInt(res.data.page.page_total);
                        scope.dataPageNo = page;
                    }
                    // 总页数为0时
                    if (scope.dataPageCount === 0) {
                        scope.hasNextPage = false;
                        scope.pageNumberList = [];
                        // 总页数小于等于最大显示页数时
                    } else if (scope.dataPageCount <= scope.pageNumberListLength) {
                        scope.hasLastPage = false;
                        scope.hasNextPage = false;
                        scope.pageNumberList = []
                        for (var i = 0; i < scope.dataPageCount; i++) {
                            scope.pageNumberList.push(i + 1)
                        }
                        // 是否还有上一页
                        if (scope.dataPageNo > 1) {
                            scope.hasLastPage = true;
                        } else {
                            scope.hasLastPage = false;
                        }
                        // 是否还有下一页
                        if (scope.dataPageNo < scope.dataPageCount) {
                            scope.hasNextPage = true;
                        } else {
                            scope.hasNextPage = false;
                        }
                        // 总页数大于最大显示页数时
                    } else if (scope.dataPageCount > scope.pageNumberListLength) {
                        // 页数小于
                        var pageNumberListLengthHalf = Math.ceil(scope.pageNumberListLength / 2);
                        scope.pageNumberList = [];
                        if (scope.dataPageNo <= pageNumberListLengthHalf) {
                            for (var i = 0; i < scope.pageNumberListLength; i++) {
                                scope.pageNumberList.push(i + 1);
                            }
                        } else if (scope.dataPageNo > scope.dataPageCount - pageNumberListLengthHalf) {
                            for (var i = scope.dataPageCount - scope.pageNumberListLength; i < scope.dataPageCount; i++) {
                                scope.pageNumberList.push(i + 1);
                            }
                        } else {
                            for (var i = scope.dataPageNo - pageNumberListLengthHalf; i < scope.dataPageNo + pageNumberListLengthHalf - 1; i++) {
                                scope.pageNumberList.push(i + 1);
                            }
                        }
                        // 是否还有上一页
                        if (scope.dataPageNo > 1) {
                            scope.hasLastPage = true;
                        } else {
                            scope.hasLastPage = false;
                        }
                        // 是否还有下一页
                        if (scope.dataPageNo < scope.dataPageCount) {
                            scope.hasNextPage = true;
                        } else {
                            scope.hasNextPage = false;
                        }
                    }
                })
            };
            scope.changePage(null, scope.dataStartPage);
        }
    }
})
时间: 2025-01-01 04:38:39

angular 分页插件的相关文章

angular 分页插件的使用

html: <pagination total-items="totalItems" ng-model="currentPage" items-per-page="itemPerPage" previous-text="上一页" next-text="下一页" page-sizes="pageSizes" edit-page="editPage" ng-chan

AngularJS自定义指令详解(有分页插件代码)

前言 除了 AngularJS 内置的指令外,我们还可以创建自定义指令. 通过 .directive() 函数来添加自定义的指令. 调用自定义指令时,需要在HTMl 元素上添加自定义指令名. 自定义指令命名规则:使用驼峰命名法来命名,即除第一个单词外的首字母需大写.如: myDirective. 在html页面调用该指令时需要以 - 分割,如: my-directive.示例代码: <body ng-app="myApp"> <my-directive><

angularJS前端分页插件

首先在项目中引入 分页插件的 js 和 css: 在html页面引入 相关js 和 css: 在控制器中引入分页插件中定义的 module[可以打开pagination.js查看,可以看到 其实,在插件里面,它定义了一个单独的 module,所以我们在控制器中使用分页插件时,要先注入 这个 module ] 然后我们就可以在想要出现分页控件的位置,加上一个标签: 加上这个标签,就会在这里出现分页,注意,它有个属性 conf 这里定义的名字是 paginationConf,这个属性是个对象,它可以

Spring Boot系列教程八: Mybatis使用分页插件PageHelper

一.前言 上篇博客中介绍了spring boot集成mybatis的方法,基于上篇文章这里主要介绍如何使用分页插件PageHelper.在MyBatis中提供了拦截器接口,我们可以使用PageHelp最为一个插件装入到SqlSessionFactory,实现拦截器功能. 二.实现 pom.xml文件中添加依赖包 1 <dependency> 2 <groupId>com.github.pagehelper</groupId> 3 <artifactId>pa

JQueryPagination分页插件,ajax从struts请求数据

2017-07-16 学完了struts,做了个关于分页的小例子,用到了JQuery分页插件Pagination,先贴下插件下载地址 http://www.jq22.com/jquery-info13734 插件作者对于参数讲解的不够详细,琢磨了半天才明白怎么用,不多说,直接代码 1.客户端(jsp页面) 1 /*这些css为了控制生成的数据和分页的li标签的位置*/ 2 a { 3 text-decoration:none; 4 color:black; 5 font-weight: bold

github分页插件的业务逻辑

github分页插件查询的业务逻辑: controller层: query封装前端传来的数据 Service层: 1.构建一个PageBounds:当前页(page).查询多少条(pageSize).排序 2.调用dao的查询方法:查询条件,分页参数对象:返回一个PageList或者List 3.service接收到dao的查询结果(结果集.分页对象paginator) 返回的数据: 根据EsasyUI,必须返回rows 和 total,rows为dao曾返回的结果列表,total为分页对象中的

Spring Boot集成MyBatis与分页插件

Maven依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.6</version> </dependency> MybatisConfig.java: import java.util.Properties; import javax.sql.Dat

Mybatis分页插件

Mybatis分页插件 - PageHelper说明 如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件. 该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页. 点击提交BUG 版本说明 最新版本为3.7.5 PageInfo中的judgePageBoudary方法修改: isLastPage = pageNum == pages && pageNum != 1; //改为 isLastPage

基于jquery的ajax分页插件(demo+源码)

前几天打开自己的博客园主页,无意间发现自己的园龄竟然有4年之久了.可是看自己的博客列表却是空空如也,其实之前也有写过,但是一直没发布(然而好像并没有什么卵用).刚开始学习编程时就接触到博客园,且在博客园学习了很多的知识,看过很多人的分享.说来也惭愧,自己没能为园友们分享自己的所学所得(毕竟水平比较差). 过去的一年也是辗转了几个城市换了几份工作(注定本命年不太平?).八月份来到现在所在的公司(OTA行业),公司是做互联网的,所以可能大家的前端都屌屌的?之前一直从事.NET开发(现在在这边也是),