ui-grid-resize-column 디렉티브를 넣어줘야 컬럼 사이즈 조절이 가능함.
ui-grid-move-columns 디렉티브를 넣으면 컬럼 간에 이동이 가능함.
그리고 컬럼을 동적으로 바꿔주려면
초기 컬럼 정의를 $scope 내에 $scope.columns 에다 정의하고,
필요한 시점에서
push 와 splice 로 컬럼을 넣어주면 된다.
DTO 에는 column와 value를 넣어줘서 보내주면 각각 셋팅하면 된다.
View(html)
<!doctype html> <html ng-app="app"> <head> <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> <link rel="styleSheet" href="https://cdn.rawgit.com/angular-ui/bower-ui-grid/master/ui-grid.min.css" /> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.js"></script> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular-touch.js"></script> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular-animate.js"></script> <script src="http://ui-grid.info/docs/grunt-scripts/csv.js"></script> <script src="http://ui-grid.info/docs/grunt-scripts/pdfmake.js"></script> <script src="http://ui-grid.info/docs/grunt-scripts/vfs_fonts.js"></script> <script src="/js/myCtrl.js"></script> <style> </style> </head> <body> <div class="container"> <div ng-controller="MainCtrl"> <div id="grid1" ui-grid="gridOptions" ui-grid-resize-columns ui-grid-move-columns class="grid"></div> <div class="well"> <button ng-click="click()" type="button" class="btn btn-primary">Click</button> </div> </div> </div> </body> </html>
Controller (myCtrl.js)
var app = angular.module('app', ['ngAnimate', 'ui.grid','ui.grid.resizeColumns', 'ui.grid.moveColumns']); app.controller('MainCtrl', ['$scope', '$http', function ($scope, $http, uiGridConstants) { $scope.startId = 0; $scope.columns = [{ field: 'id' }, { field: 'name' }]; $scope.gridOptions = { enableSorting: true, enableFiltering:true, rowHeight: 30, columnDefs: $scope.columns }; $scope.click = function() { $scope.startId = $scope.startId + 20; $http({ method: 'GET', url: '/mongodata?collection=mycoll&startId=' + $scope.startId + '&size=20' }).then(function successCallback(response) { $scope.gridOptions.data = response.data.values; $scope.columns.splice(1, $scope.columns.length-1); for (var i in response.data.colums) { $scope.columns.push(response.data.colums[i]); } }, function errorCallback(response) { alert(JSON.stringify(response)); }); } }]);
Spring Controller
@RequestMapping(value="/mongodata", method=RequestMethod.GET) @ResponseBody public UiGridDto mongodata(@RequestParam String collection, @RequestParam Integer startId, @RequestParam Integer size) { UiGridDto res = new UiGridDto(); List<Map<String, Object>> values = new ArrayList<Map<String, Object>>(); Document f = new Document("id", new Document("$gt", Integer.valueOf(startId))); FindIterable<Document> itr = Mongo.getInstance().getDB().getCollection(collection).find(f).limit(size); Set<String> allKeys = new HashSet<String>(); itr.forEach(new Block<Document>() { @Override public void apply(Document t) { Set<String> keys = t.keySet(); Map h = new HashMap<String, Object>(); for (String key : keys) { h.put(key, t.get(key)); allKeys.add(key); } values.add(h); } }); List<Map<String, Object>> columns = new ArrayList<Map<String, Object>>(); for (String key : allKeys) { Map<String, Object> map = new HashMap<String, Object>(); map.put("field", key); map.put("width", "*"); map.put("resizable", true); columns.add(map); } res.setColums(columns); res.setValues(values); return res; }
UI Grid DTO
public class UiGridDto implements Serializable{ private static final long serialVersionUID = 3836028973603051148L; public UiGridDto() { } List<Map<String, Object>> colums; List<Map<String, Object>> values; Integer maxRows; public List<Map<String, Object>> getColums() { return colums; } public void setColums(List<Map<String, Object>> colums) { this.colums = colums; } public List<Map<String, Object>> getValues() { return values; } public void setValues(List<Map<String, Object>> values) { this.values = values; } public Integer getMaxRows() { return maxRows; } public void setMaxRows(Integer maxRows) { this.maxRows = maxRows; } }
댓글 없음:
댓글 쓰기