ng-grid的server端排序/列筛选/翻页/loading

大家好,最近一直在使用angular的ng-grid,这个插件确实很好用,就是一些serverside端的操作需要自己去实现.

下面我给大家提供一些我自己写的关于server端排序/列筛选/翻页/loading的一些代码,大家可以参考.

先提倡大家看api,地址点击打开链接


下面开始正文:(本文只在添加了ng-grid和其他插件的基础上去参考...基本引入在ng-grid基础)

首先看一下我的表格(大家凑合看...)



红框圈出来分页/过滤/排序/条件 等一些

下面来看代码(不免删掉了一些有关鄙人业务的东西,有没用处的东西,大家凑合看就好)

var app = angular.module('app', ['ngAnimate','cgBusy', 'ngTouch','ui.bootstrap', 'ui.grid','ui.grid.autoResize','ui.grid.pagination', 'ui.grid.selection', 'ui.grid.cellNav', 'ui.grid.resizeColumns', 'ui.grid.moveColumns', 'ui.grid.pinning', 'ui.grid.grouping' ]);
var wordTpl = {};
var pageTpl = {};
var mainknow = {};

var worp = "";
var delwpid = "";
var maindelid = "";
var filterConditions={};
var orderConditions = {};
var page=1;
var rows=50;
var genderHash = {
	    1: '类型1',
	    2: '类型2',
	    3: '类型3',
	     };

var templateOp=
	[ 
		{value:'1',label: '类型1'},
		{value:'2',label: '类型2'},
		{value:'3',label: '类型3'},
	]
//主Controller
app.controller("mainController",function ($scope,$http) {
	$scope.delay = 0;
	$scope.minDuration = 0;
	$scope.message = 'Please Wait...';
	$scope.backdrop = true;
	$scope.promise = null;
	
	
	$scope.rowFormatter = function( row ) {
		return row.entity.gds.dbInputSumStatusJson.replace('{','').replace('}','').replace(',',';').replace(/\"/g,'');
	  };
	
})
.controller('liststatusDetail', ['$scope', '$http', 'uiGridConstants','i18nService', function ($scope, $http, uiGridConstants,i18nService) {
	i18nService.setCurrentLang("zh-cn");
	
	$scope.highlightFilteredHeader = function(row,rowRenderIndex, col, colRenderIndex) {
	if (col.filters[0].term) {
		return 'header-filtered';
	} else {
		return '';
	}
	};
	
	$scope.gridOptions = {
	paginationPageSizes : [ 50, 100, 200 ],
	paginationPageSize : 50,
	enableFiltering : true,
	enablePaging:true,
	useExternalPagination: true,
	useExternalFiltering: true,
	useExternalSorting: true,
	onRegisterApi : function(gridApi) {
		$scope.gridApi = gridApi;
		$scope.gridApi.core.on.filterChanged( $scope, function() {//监听filter过滤条件的改变
			filterConditions={};
			console.log($scope.gridApi);
			var grid=this.grid;
			console.log(this.grid);
			grid.columns.forEach(function(column) {
				var everyFilters=[];
				column.filters.forEach(function(filter) {
//					console.log(filter.term)
		            if(filter.term!=null&&filter.term!='undefined'){
		              everyFilters.push(filter);
		            }
		        });
				if(everyFilters.length>0){
					filterConditions[column.field]=everyFilters;//生成一个自己定义的对象,以便传给后台去操作
				}
		    });
			
			console.log(filterConditions);
		});
		gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {//监听分页条件的改变
			console.log(newPage)
			console.log(pageSize)
			page = newPage;
			rows = pageSize;
			$scope.showStatus(orderConditions);
		});
		gridApi.core.on.sortChanged( $scope, function ( grid, sortColumns ){//监听排序条件的改变
			console.log(grid);
			console.log(sortColumns);
			orderConditions={};
			for ( var x in sortColumns) {
				orderConditions[sortColumns[x].field]=sortColumns[x].sort;//生成一个自己定义的对象,以便传给后台去操作
			}
			$scope.showStatus(orderConditions);
			
		});
	},
	columnDefs : [
			
			{
				field : 'jobId',
				type:'number',
				headerCellClass : $scope.highlightFilteredHeader,
				displayName : 'Jobid',
				minWidth: 150,
				width : '10%',
			},
		
			{
				field : 'taskId',
				headerCellClass : $scope.highlightFilteredHeader,
				displayName : '任务id',
				minWidth: 150,
				width : '10%'
			},
			{
				field : 'site',
				headerCellClass : $scope.highlightFilteredHeader,
				displayName : '站点',
				minWidth: 150,
				width : '10%'
			},
			 ],
	};


    
	$scope.showStatus = function(order) {//获取数据方法
		var order = order||orderConditions;
		var seldate = $scope.dat.Format("yyyyMMdd");
		console.log(seldate);
		
		$scope.promise = $http({
			method:'post',
			url:'/url.do',
			data:{seldate:seldate,filterRules:JSON.stringify(filterConditions),rows:rows,page:page,sort:JSON.stringify(order)},
			headers:{'Content-Type': 'application/x-www-form-urlencoded'},//post传参必须
			transformRequest: function(obj) {//post传参必须
				 var str = [];
				 for(var p in obj){
					 str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
				 }
			 	return str.join("&");
			 }
		}).success(function(data){
			$scope.gridOptions.totalItems = data.total;
			$scope.gridOptions.data = data.rows;
		})
	};
	
	$scope.showStatus();
	
	$scope.clearAllfilter = function() {//清除所有筛选条件
		//clearAllFilters
		var seldate = $scope.dat.Format("yyyyMMdd");
		$scope.gridApi.core.clearAllFilters();
		$scope.showStatus();
		
	};
	
}]) 

前台代码大概就是这么多,还有一个loading的东西,是angular的一个插件,地址给大家,自己去研究一下,很ez.地址:loading加载-angular-busy

前台主要是把一些要传给后台去处理的数据打好包,后台去处理,然后去解析下,拿到想要的值

后端是我自己写了一个分页/排序/过滤的就算架子吧,用这个架子,前端传来参数,后边直接解析然后把sql就拼成了.

后端代码如果有需要私信我就好,在此就不献丑了.

谢谢大家.大笑

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值