angularjs分页

var routerApp = angular.module('routerApp', ['routerApp.paging']);

 
/**
 * 公共分页
 */
angular.module('routerApp.paging', [])
/***
 *   html
 *   <div id="history" class="page r">
 *   ==============页面触发事件查询js=============start====
 *   直接调用loadData(scope,data,params);
 *   参数:scope:$scope
 *       data:前台分页DTO
 *       params:定义了  
 *          indexCss:"display:none;",//选填
 *			liCss:"border:none;",//li的样式设置  选填
 *			endCss:"display:none;",//尾页样式设置 选填
 *			prev:"<",//上一页可自定义 选填
 *			next:">",//下一页自定义 选填
 *			totalCss:"display:none;",//总页数样式设置 选填
 *			pageId:pageId,//对应页面的div id  必填 
 *			method:"queryHistoricalnet",//用于点击分页按钮时调用的函数名 动态分页必填
 *			listType:'data',//需要展示的数组类型 选填
 *			pageSize:10,//每页展示条数 选填
 *			pageCount:5,//页码个数 选填
 *			pageType:2//分页类型:1 动态分页 2 静态分页 (如果不填则是1) 静态分页必填
 *   ==============页面触发事件查询js=============end====      
 */
.factory("pageService",function($parse){
	return {
		loadData:function(scope,data,params){
			loadData(scope,data,params);
		}
	};
	//查询数据
	function loadData(scope,data,params){
		if(!data){
			return;
		}
		//设置参数
		if(params){
			setParams(data,params);
		}
		//清除之前的分页内容
		$("#"+data.pageId).children().remove();
		$("#"+data.pageId).addClass("r");
		if(!data[data.listType] || data[data.listType]=="null" ||  data[data.listType].length==0){
			data[data.listType] = {};
			$("#"+data.pageId).append($("<span> 没有查询到相应的数据</span>"));
			$("#"+data.pageId).removeClass("r");
			return;
		}
		var pageSpan=$("#pageId_"+data.pageId);
		pageSpan=$('<ul id="pageId_'+data.pageId+'"></ul>');
		$("#"+data.pageId).append(pageSpan);
		//点击页码分页事件
		event(scope,data);
		
		
		var totalPages = "";//总页数
		/*
		 * 判断是静态分页还是静态分页
		 * 默认是动态分页或者等于1时是动态分页
		 * 2 为静态分页
		*/
		if(data.pageType && "2"==data.pageType && data.tempArr.length==0){
			var dataList = data[data.listType];
			if(dataList && dataList.length>0){
				if(dataList.length%data.pageSize==0){
					totalPages = data.totalPages = dataList.length/data.pageSize;
				}else{
					totalPages = data.totalPages = parseInt(dataList.length/data.pageSize) + 1;
				}
				//将数组拆分成totalPages个
				data.tempArr = getNewArray(dataList,data.pageSize);
				data[data.listType]=[];
				for (var j = 0; j < data.tempArr[0].length; j++) {
					data[data.listType].push(data.tempArr[0][j]);
				}
			}
		}else{
			totalPages = data.totalPages;
		}
		if(totalPages<data.pageCount){
    		data.pageCount = totalPages;
    	}
	    setPageNumber(data);
		var pageText="<li class='indexCSS' style='"+data.totalCss+"'>共 <span style='color:red;'>"+totalPages+"</span> 页</li>";
		//动态定义分页所需元素
		pageText+="<li tag='"+1+"' style='"+data.indexCss+"'>首页</li>";
		pageText+="<li tag='"+(data.currentPage-1)+"' style='"+data.liCss+"'>"+data.prev+"</li>";
		for (var i = 0; i < data.pageNumber.length; i++) {
			if(data.pageNumber[i]==data.currentPage){
				pageText=pageText+'<li tag="'+data.pageNumber[i]+'" class="selected" style="'+data.liCss+'">'+data.pageNumber[i]+'</li>';
			}else{
				pageText=pageText+'<li tag="'+data.pageNumber[i]+'" style="'+data.liCss+'">'+data.pageNumber[i]+'</li>';
			}
		}
		pageText+="<li tag='"+(data.currentPage+1)+"' style='"+data.liCss+"'>"+data.next+"</li>";
		pageText+="<li tag='"+data.totalPages+"' style='"+data.endCss+"'>尾页</li>";
		pageSpan.append(pageText);
		if(totalPages==1){
			$("#"+data.pageId).children().remove();
		}
		
	};
	function event(scope,obj){
		$("#pageId_"+obj.pageId).bind('click',function(e){
			e = e || window.event;
	        var target = e.target || e.srcElement;
	        // 不是<li>标签就返回
	        if(target.nodeName !== 'LI' || $(target).hasClass("indexCSS")) {
	            return;
	        }
	        var tag = parseInt($(target).attr("tag"));
	        if(tag==0||tag==obj.totalPages+1){
	        	return;
	        }
	        obj.currentPage = tag;
	        if(obj.pageType && "2"==obj.pageType){
	        	scope.$apply(function() {
		        	obj[obj.listType] = [];
		        	for (var i = 0; i < obj.tempArr[obj.currentPage-1].length; i++) {
		        		obj[obj.listType].push(obj.tempArr[obj.currentPage-1][i]);
					}
		        	loadData(scope,obj);
	        	});
	        }else{
	        	scope.$apply(function() {
	        		var getter = $parse(obj.method);
					getter(scope);
	            });
	        }
	        if(typeof e.preventDefault === 'function') {
	        	e.preventDefault();
	        	e.stopPropagation();
	        }else {
	        	e.returnValue = false;
	        	e.cancelBubble = true;
	        }
		});
	}
	/**
	 *将数组分割成新的数组[二维数组]
	 *@param myArray 需要分割的数组
	 *@param size    分割每个子数组的长度
	 */
	function getNewArray(myArray,size){
	  var len=parseInt(myArray.length/size);
	  var remain=myArray.length%size;
	  var my_array=[],sot=remain>0?len+1:len; 
	  for ( var f = 1; f <=sot; f++) {
	    var start=size*(f-1);
	    var end=(f>len)?((f-1)*size+remain):f*size;
	    var mylocates=myArray.slice(start,end);
	    my_array.push(mylocates);
	  }
	 return my_array;
	}
	function setPageNumber(data){
		data.pageNumber = new Array();//页码
		if(data.currentPage<=data.totalPages-data.pageCount){
			for (var i = 0; i < data.pageCount; i++) {
				data.pageNumber[i]= data.currentPage+i;
			};
		}else{
			for (var i = data.pageCount-1; i >= 0; i--) {
				data.pageNumber.push(data.totalPages-i);
			};
		}
	}
	//参数设置
	function setParams(data,params){
		data.tempArr = new Array();//静态分页专用:临时数组
		data.pageSize=params && params.pageSize?params.pageSize:10;
		data.pageCount=params && params.pageCount && params.pageCount>0 && params.pageCount<10 ? params.pageCount:5;
		data.pageType=params && params.pageType ? params.pageType:1;
		data.listType =params &&  params.listType ? params.listType : "data";
		data.pageId = params.pageId;
		data.currentPage = data.currentPage ? data.currentPage : 1;
		data.method = params && params.method ? params.method : "";
		//样式赋值
		data.liCss = params && params.liCss ? params.liCss : "";
		data.indexCss = params && params.indexCss ? params.indexCss : "";
		data.endCss = params && params.endCss ? params.endCss : "";
		data.totalCss = params && params.totalCss ? params.totalCss : "";
		data.prev = params && params.prev ? params.prev : "上一页";
		data.next = params && params.next ? params.next : "下一页";
	}
});

/*前端分页*/
.page {padding-bottom: 5px;}
.page li{padding: 4px 10px;font-size: 14px; border: 1px solid #d2d2d2; float: left; margin-right: 10px;cursor:pointer}
.page li.selected{ color: #ff6600;border: 1px solid #fff}
.page .indexCSS{padding: 4px 10px;font-size: 14px; float: left; border: none;cursor:default;}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值