angular自定义分页组件(实用)
功能描述:分页,点击按钮或者下一页获取分页接口,同时active到对应页码。
html模块:
<page page-count="totalPage" on-click-page="reloadData(page)"></page>
controller模块:
var context = $scope;
#scope.reloadData = reloadData;//(重要:需要与页面的事件进行绑定)
function reloadData(page) {
    context.params.pageNumber = page || 1;//将参数变为点击的page,默认为1
    getPackageList(context.params);//请求后端分页接口(根据业务todo)
}
directive模块:
(function () {//自定义指令
appModule.directive('page', pageController);
function pageController() {
    return {
        restrict: 'AE',
        templateUrl: '/directive/page.html',
        scope: {
            pageCount:'=',//对应totalPage
            onClickPage:'&' //对应reloadData()
        },
        link: function( scope, elem, attrs, c){
            var context = scope;
            context.onClickPrev = onClickPrev;
            context.onClickNext = onClickNext;
            context.onClickPageNumber = onClickPageNumber;
       
       //$scope.watch为了兼容以前版本写法(如一开始就用这个分页组件,分页逻辑相同,可修改为下面一种写法)
            !function init() { //!function init()效果和下面一样(这里做了老版本兼容)
                context.pageNumber = 1;
                scope.$watch(function () {
                    return context.pageCount//监听发现分页总数变了,执行后面函数
                }, function () {
                    if (typeof context.pageCount != 'object' && typeof parseInt(context.pageCount) == 'number') {
                        var temp = [];
                        for (var i = 1; i <= context.pageCount; i++) {
                            temp.push(i);
                        }
                        context.pageCount = temp;
                    }
                });
            }();
       //分页逻辑相同,可直接将init写为这样(不用兼容以前)
       init();
       function init(){
        context.pageNumber = 1;
       }
 
            function onClickPageNumber(pageNumber) {
                context.onClickPage({page:pageNumber});//这里必须按着这种格式写,他是根据数组中的参数名对应来找
          //如果直接这样传参context.onClickPage(pageNumber),会报Cannot use 'in' operator to search for 'reloadData' in 2(寻找不到参数错误)
context.pageNumber = pageNumber;
context.showPrev = pageNumber > 1;
} function onClickPrev() {
context.pageNumber -= 1;
context.onClickPage({message:context.pageNumber});
if (context.pageNumber == 1) {
context.showPrev = false;
}
context.showNext = true;
} function onClickNext() { if (context.pageNumber < context.pageCount.length) {
context.pageNumber += 1;
}
context.onClickPage({message:context.pageNumber});
}
}
};
}
})();
directive模板:
<div class="page-holder" ng-show="pageCount.length>1">
<span class="prev m-link" ng-if="pageNumber != 1" ng-click="onClickPrev()"><</span>
<div style="display: inline" class="m-default"
ng-repeat="page in pageCount track by $index" ng-show="($index+1>pageCount.length-5&&pageNumber>pageCount.length-3)||($index<5&&pageNumber<4)||($index+1>pageNumber-3 && $index+1<pageNumber+3)">
<span class="page m-link" ng-class="{'green':page == pageNumber}"
ng-click="onClickPageNumber(page)">{{page}}</span>
</div>
<span class="next m-link" ng-if="pageNumber != pageCount.length" ng-click="onClickNext()">></span>
<span class="total-page m-default">共 {{pageCount.length}} 页</span>
</span>
</div> <style>
.page-holder {
display: inline-block;
height: 30px;
line-height: 30px;
margin-right: 20px;
float: right;
} .page, .prev, .next, .total-page {
color: #616161;
padding: 0px 6px;
border:1px solid #f2f2f2;
} .green{
color:#0A9908;
}
</style> 效果如下:


-----原创文章,©版权所有,转载请注明标明出处:http://www.cnblogs.com/doinbean
angular自定义分页组件(实用)的更多相关文章
- Angular4.+ ngx-bootstrap Pagination 自定义分页组件
		Angular4 随笔(二) ——自定义分页组件 1.简介 本组件主要是实现了分页组件显示功能,通过使用 ngx-bootstrap Pagination分页组件实现. 基本逻辑: 1.创建一个分页 ... 
- Python自定义分页组件
		为了防止XSS即跨站脚本攻击,需要加上 safe # 路由 from django.conf.urls import url from django.contrib import admin from ... 
- Django框架---- 自定义分页组件
		分页的实现与使用 class Pagination(object): """ 自定义分页 """ def __init__(self,cur ... 
- vue 自定义分页组件
		vue2.5自定义分页组件,可设置每页显示条数,带跳转框直接跳转到相应页面 Pagination.vue 效果如下图: all: small(只显示数字和上一页和下一页): html <temp ... 
- 基于 Python 的自定义分页组件
		基于 Python 的自定义分页组件 分页是网页中经常用到的地方,所以将分页功能分出来,作为一个组件可以方便地使用. 分页实际上就是不同的 url ,通过这些 url 获取不同的数据. 业务逻辑简介 ... 
- vue自定义分页组件---切图网
		vue2.5自定义分页组件 Pagination.vue,可设置每页显示条数,带跳转框直接跳转到相应页面,亲测有用.目前很多框架自带有分页组件比如elementUI,不过在面对一个拿到PSD稿,然后重 ... 
- Flex4 自定义分页组件
		自己写的Flex4分页组件,去伪存真,只实现基本的分页功能,数据过滤神马的都不应该是分页组件干的活,有呆毛才有真相: [源代码下载] Flex自从转手给Apache后人气急跌,本人也很捉鸡,尽管Apa ... 
- jquery ajax自定义分页组件(jquery.loehpagerv1.0)原创
		简单的两个步骤截可调用 <script src="<%=basePath%>/resources/js/jquery-1.7.1.min.js"></ ... 
- Django 分页组件替换自定义分页
		Django的分页器(paginator) 总之不太好用我们还是用自己的好一些 自定义分页器 分页实现源码 """ 自定义分页组件 """ ... 
随机推荐
- VS2015如何连接mySQL数据库图文
			1.新建一个工程名叫mysql,编程环境选择c#,然后选择windows窗体应用程序,新建一个窗体用于显示查询到sql数据库的数据集 2.从工具箱向form1窗体上拖一个按钮和datagridview ... 
- Files and Directories
			Files and Directories Introduction In the previous chapter we coveredthe basic functions that pe ... 
- canvas图表(2) - 折线图
			原文地址:canvas图表(2) - 折线图 话说这天气一冷啊, 就患懒癌, 就不想码代码, 就想着在床上舒舒服服看视频. 那顺便就看blender视频, 学习下3D建模, 如果学会了建3D模型, 那 ... 
- 插入排序-Python与PHP实现版
			插入排序Python实现 import random a=[random.randint(1,999) for x in range(0,36)] # 直接插入排序算法 def insertionSo ... 
- 自动化之路 python psutil模块 收集硬件信息
			一.psutil模块 1. psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要应用于系统监控,分析和限制系统资源及进程的管理.它实现了 ... 
- redis数据类型及常用命令介绍(图文实例)
			aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhgAAAFLCAYAAACUdvXUAAAgAElEQVR4nO3da1da58L2fT5KfPvc96 ... 
- Redis 快速入门
			Redis 快速入门 谈到Redis,大家应该都不陌生.它是用c语言开发的一个高性能键值数据库,主要用于缓存领域.本章通过Redis的安装,Redis的五大数据类型,Redis的Java客户端,Red ... 
- 说说缓存,说说Redis
			无论是客户端还是服务端,缓存都是必不可少的一种提升用户体验的策略,大家在平时开发中,有意无意都会用到缓存,比如说 Android 开发的同学们,所有的图片框架,基本都有用到缓存技术,服务端那就完全不用 ... 
- 《java.util.concurrent 包源码阅读》21 CyclicBarrier和CountDownLatch
			CyclicBarrier是一个用于线程同步的辅助类,它允许一组线程等待彼此,直到所有线程都到达集合点,然后执行某个设定的任务. 现实中有个很好的例子来形容:几个人约定了某个地方集中,然后一起出发去旅 ... 
- 74、django之ajax补充
			之前的ajax使用都是依据jquery来使用的,本篇会先分析ajax的原生的js代码实现,还有jsonp的介绍,与OMR的一些遗漏补充. 本篇导航: js实现的ajax 同源策略与Jsonp 一.js ... 
