angularjs 分页指令编写

分页效果:


分页说明

分页使用的样式基于bootstrap样式。


分页模板

<div class="btn-group-sm pull-right">
	<button type="button" class="btn btn-default btn-sm" ng-disabled="options.pageNumber==1 || options.pageTotal==0" ng-click="pageChanged('fristPage');"><i class="fa fa-angle-left" ></i></button>
	<button type="button" class="btn btn-default btn-sm" ng-disabled="options.pageNumber==1 || options.pageTotal==0" ng-click="pageChanged('previousPage');"><i class="fa fa-angle-double-left" ></i></button>
	<button type="button" class="btn btn-default btn-sm" ng-disabled="options.pageTotal==0" ng-click="pageChanged('refresh');"><i class="fa fa-refresh"></i></button>
	<button type="button" class="btn btn-default btn-sm" ng-disabled="options.pageNumber==options.pageTotal || options.pageTotal==0" ng-click="pageChanged('nextPage');"><i class="fa fa-angle-double-right" ></i></button>
	<button type="button" class="btn btn-default btn-sm" ng-disabled="options.pageNumber==options.pageTotal || options.pageTotal==0" ng-click="pageChanged('lastPage');"><i class="fa fa-angle-right" ></i></button>
</div>

<div class="btn-group pull-left" style="margin-top:5px">
	显示 <span ng-bind="options.pageTotal"></span> 页,
	<span class="dropup" ng-if="options.pageTotal>0"> 每页
		<a href="" data-toggle="dropdown">
	        <span ng-bind="options.pageSize"></span> <span class="caret"></span> 
	    </a>条数据,
	<ul class="dropdown-menu">
		<li ng-repeat="item in options.pageList">
			<a href="" ng-bind="item" ng-click="pageSizeChanged(item);"></a>
		</li>
	</ul>
	</span>
	<span class="dropup" ng-if="options.pageTotal<=0"> 
		每页<span ng-bind="options.pageSize"></span> 条数据,
	</span>
	
	当前第 <span ng-bind="options.pageNumber"></span> 页,共条 <span ng-bind="options.total"></span> 条数据
</div>


分页指令

/**
 * 分页
 * 参数:
 * options:{
 * 	total:0,*  pageList: [10,20,30,50]
 * }
 * 
 * onPageChanged:function(type,pageParam){
 * 	
 * }
 * 
 */
angular.module('cjhme.pagination',[])
	.directive('cjhmePagination',[function() {
		return {
			scope: {
				options: '=options',onPageChanged: '&onpagechanged'
			},replace: false,templateUrl: 'module/directive/pagination/pagination.html',link: function($scope,$element,$attrs) {
				var opts = {
					total: 0,pageList: [10,50,100,150,200]
				};

				//初始化分页
				function initPagination() {
					if($scope.options && $scope.options.pageList && $scope.options.pageList.length <= 0) {
						$scope.options.pageList = opts.pageList;
					}

					angular.extend(opts,$scope.options);
					opts.pageSize = opts.pageList[0];

					$scope.options = opts;
					refreshPagination($scope);

				}

				//刷新分页
				function refreshPagination() {
					$scope.options.pageTotal = 0;
					if(parseInt($scope.options.total) % parseInt($scope.options.pageSize) == 0) {
						$scope.options.pageTotal = parseInt(parseInt($scope.options.total) / parseInt($scope.options.pageSize));
					} else {
						$scope.options.pageTotal = parseInt((parseInt($scope.options.total) / parseInt($scope.options.pageSize)) + 1);
					}

					if($scope.options.pageTotal <= 0) {
						$scope.options.pageNumber = 0;
					} else {
						$scope.options.pageNumber = 1;
					}
				}

				//下一页
				function nextPage() {
					$scope.options.pageNumber++;
					if($scope.options.pageNumber > $scope.options.pageTotal) {
						$scope.options.pageNumber = $scope.options.pageTotal;
					}
				}

				//上一页
				function previousPage() {
					$scope.options.pageNumber--;
					if($scope.options.pageNumber <= 0) {
						$scope.options.pageNumber = 1
					}
				}

				//最后一页
				function lastPage() {
					$scope.options.pageNumber = $scope.options.pageTotal;
				}

				//第一页
				function fristPage() {
					$scope.options.pageNumber = 1;
				}


                //分页操作
				function onPageChanged(type) {
					var pageParam = {
						pageNumber: $scope.options.pageNumber,pageSize: $scope.options.pageSize,pageTotal: $scope.options.pageTotal,total: $scope.options.total
					}

					$scope.onPageChanged()(type,pageParam);
				}
				
				//分页改变
				$scope.pageChanged = function(type) {
					switch(type) {
						case 'nextPage':
							nextPage();
							break;
						case 'lastPage':
							lastPage();
							break;
						case 'previousPage':
							previousPage();
							break;
						case 'fristPage':
							fristPage();
							break;
					}
					onPageChanged(type);
				}

				//页数改变
				$scope.pageSizeChanged = function(curSize) {
					$scope.options.pageSize = curSize;
					refreshPagination();
					onPageChanged("pageSizeChange");
				}

				$scope.$watch('options',function(newVal,oldVal) {
					initPagination()
				})
			}

		};
	}]);

分页使用:

html页面使用时:<div cjhme-pagination options="pagerConfig" onPageChanged="pagerChange"></div>

controller中首先引入:cjhme.pagination,使用时配置如下参数:

//分页
	$scope.pagerConfig = {
		total: 30,pageList: [15,25,35]
	}

	$scope.pagerChange = function(type,pageParam) {
		console.info(type);
		console.info(pageParam);

	}

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...