Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,10 @@ Direct download: get ZIP archive [from here](https://github.com/angular-data-gri
Then use files from *dist* folder (see below).

### Setup
1. Include scripts in you application: `dataGrid.min.js` and `pagination.min.js` (include the second one only if you need pagination).
1. Include scripts in you application: `angular.min.js`, `dataGrid.min.js` and `pagination.min.js` (include the second one only if you need pagination).

```javascript
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script src="bower_components/angular-data-grid/dist/pagination.min.js"></script>
<script src="bower_components/angular-data-grid/dist/dataGrid.min.js"></script>
```
Expand Down Expand Up @@ -105,7 +106,10 @@ Use this object for calling methods of directive: `sort()`, `filter()`, `refresh
};
```

- For server side pagination/filtering to fetch data by page: assign ```getData``` method to some function with URL params as 1st parameter and data itself as 2d parameter:
- For server side pagination/filtering to fetch data by page:
1. add attribute 'server-pagination'=true on element on which you applied directive 'grid-data'
2. assign ```getData``` method to some function with URL params as 1st parameter and data itself as 2d parameter:


```javascript
$scope.gridOptions = {
Expand Down Expand Up @@ -145,7 +149,7 @@ $scope.gridOptions = {

### Pagination

You can optionally use `pagination` directive to display paging with previous/next and first/last controls.
You can optionally use `grid-pagination` directive to display paging with previous/next and first/last controls.
Directive is built on a base of excellent [Angular UI](https://angular-ui.github.io/bootstrap/) component and shares extensive API:

```HTML
Expand Down
3 changes: 3 additions & 0 deletions demo/bootstrap/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ <h4>Additional Demos</h4>
<li>
<a href="multiple.html" target="_blank">Multiple grids on page</a>
</li>
<li>
<a href="server-pagination.html" target="_blank">Server pagination</a>
</li>
</ul>
<hr>
<div class="row">
Expand Down
46 changes: 46 additions & 0 deletions demo/bootstrap/js/serverPaginationApp.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
(function () {
'use strict';

angular
.module('myApp', ['ui.bootstrap', 'dataGrid', 'pagination'])
.controller('myAppController', MyAppController)
.factory('myAppFactory', MyAppFactory);

MyAppController.$inject = ['$scope', 'myAppFactory'];
MyAppFactory.$inject = ['$http'];

function MyAppController($scope, myAppFactory) {

$scope.gridOptions = {
data: [],
getData: myAppFactory.getOrdersData,
sort: {
predicate: 'orderNo',
direction: 'asc'
}
};
$scope.UI = {};
$scope.gridActions = {};
myAppFactory.getStatuses().success(function (resp) {
$scope.UI.statusOptions = resp;
});
}

function MyAppFactory($http) {
var herokuDomain = 'https://server-pagination.herokuapp.com';
return {
getOrdersData: getOrdersData,
getStatuses: getStatuses
};

function getOrdersData(params, callback) {
$http.get(herokuDomain + '/orders' + params).success(function (response) {
callback(response.orders, response.ordersCount);
});
}

function getStatuses() {
return $http.get(herokuDomain + '/orders/statuses');
}
}
})();
222 changes: 222 additions & 0 deletions demo/bootstrap/server-pagination.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
<!-- index.html -->
<!doctype html>

<html ng-app="myApp">
<head>
<style>
.sortable:after {
font: 14px/1 FontAwesome;
content: "\f0dc";
}

.sortable.sort-ascent:after {
content: '\f0de';
vertical-align: bottom;
}

.sortable.sort-descent:after {
content: "\f0dd";
vertical-align: top;
}
</style>
<link rel="icon" href="https://angularjs.org/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<link rel="stylesheet" href="css/angular-data-grid.bootstrap.css">
</head>
<body ng-controller="myAppController">
<nav class="navbar navbar-inverse">
<div class="container">
<a href="#" class="navbar-brand">Angular Data Grid - Server Pagination</a>
<ul class="nav navbar-nav navbar-right">
<li><a href="index.html">Back to main demo</a></li>
</ul>
</div>
</nav>
<div class="container">
<div class="margin-bottom-basic">
<h3>Angular Data Grid Server Pagination</h3>
Features enabled: sorting, filtering (using both in-grid and external controls), pagination and items-per-page functionality.
Angular UI Datepicker used for date controls, although you can use any other framework, plugin or styling.
<a href="https://github.com/angular-data-grid/angular-data-grid.github.io" target="_blank">Project GitHub</a>
</div>
<hr>
<div class="row">
<div>
<div class="col-md-4">
<div class="form-group">
<label for="orderIdFilter">Search by Order #</label>
<input id="orderIdFilter" type="text" class="form-control order-search-box"
placeholder="Enter Order #"
ng-change="gridActions.filter()"
ng-model="orderNo"
filter-by="orderNo"
filter-type="text">
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label for="dateFromFilter">Date From</label>

<div class="input-group">
<input type="text"
id="dateFromFilter"
class="form-control"
uib-datepicker-popup="dd/MM/yyyy"
placeholder="DD/MM/YYYY"
max-date="dateTo"
close-text="Close"
ng-model="dateFrom"
show-weeks="true"
is-open="dateFromOpened"
ng-click="dateFromOpened = true"
filter-by="placed"
filter-type="dateFrom"
ng-blur="gridActions.filter()"
ng-focus="gridActions.filter()"
show-weeks="false"
close-text="Close"/>
<span class="input-group-btn">
<label for="dateFromFilter" class="btn btn-default">
<i class="fa fa-calendar"></i></label>
</span>
</div>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label for="dateToInput">Date To</label>

<div class="input-group">
<input type="text"
id="dateToInput"
class="form-control"
uib-datepicker-popup="dd/MM/yyyy"
placeholder="DD/MM/YYYY"
min-date="dateFrom"
close-text="Close"
ng-model="dateTo"
show-weeks="true"
is-open="dateToOpened"
ng-click="dateToOpened = true"
filter-by="placed"
filter-type="dateTo"
ng-blur="gridActions.filter()"
ng-focus="gridActions.filter()"
show-weeks="false"
close-text="Close">
<span class="input-group-btn">
<label for="dateToInput" class="btn btn-default">
<i class="fa fa-calendar"></i></label>
</span>
</div>
</div>
<div ng-show="dateTo || dateFrom" class="buttons-right">
<a href="" ng-click="dateTo = ''; dateFrom = ''; gridActions.refresh();">Clear Dates</a>
</div>
</div>
</div>
</div>


<div grid-data grid-options="gridOptions" grid-actions="gridActions" server-pagination="true">
<div class="row">
<div class="col-md-3"><span class="items">{{paginationOptions.totalItems}} items total</span></div>
<div class="col-md-9 text-right">
<form class="form-inline margin-bottom-basic">
<div class="form-group">
<div grid-pagination boundary-links="true"
ng-if="paginationOptions.totalItems > paginationOptions.itemsPerPage"
total-items="paginationOptions.totalItems"
ng-model="paginationOptions.currentPage"
ng-change="reloadGrid()"
class="pagination-sm"
items-per-page="paginationOptions.itemsPerPage">
</div>
</div>
<div class="form-group items-per-page">
<label for="itemsOnPageSelect1">Items per page:</label>
<select id="itemsOnPageSelect1" class="form-control input-sm" ng-init="paginationOptions.itemsPerPage = '10'" ng-model="paginationOptions.itemsPerPage"
ng-change="reloadGrid()">
<option>5</option>
<option>10</option>
<option>50</option>
<option>75</option>
</select>
</div>
</form>
</div>
</div>

<table class="table table-bordered">
<thead>
<tr>
<th width="30%" sortable="orderNo" class="sortable">Order #</th>
<th width="30%" sortable="datePlaced" class="sortable">Date Placed</th>
<th class="st-sort-disable th-dropdown">
<select class="form-control width-15"
filter-by="status"
filter-type="select"
ng-model="status"
ng-change="filter()">
<option value="">All Statuses</option>
<option ng-repeat="option in UI.statusOptions track by option.value"
value="{{option.value}}">{{option.text}}
</option>
</select>
</th>
<th sortable="total" class="sortable">Total</th>
</tr>
</thead>
<tbody>
<tr grid-item>
<td>{{item.orderNo}}</td>
<td>{{item.datePlaced | date:'MM/dd/yyyy'}}</td>
<td>{{item.status}}</td>
<td>{{item.total}}</td>
</tr>
</tbody>
</table>
<div class="row">
<div class="col-md-3"><span class="items">{{paginationOptions.totalItems}} items total</span></div>
<div class="col-md-9 text-right">
<form class="form-inline margin-bottom-basic">
<div class="form-group">
<div grid-pagination boundary-links="true"
ng-if="paginationOptions.totalItems > paginationOptions.itemsPerPage"
total-items="paginationOptions.totalItems"
ng-model="paginationOptions.currentPage"
ng-change="reloadGrid()"
class="pagination-sm"
items-per-page="paginationOptions.itemsPerPage">
</div>
</div>
<div class="form-group items-per-page">
<label for="itemsOnPageSelect">Items per page:</label>
<select id="itemsOnPageSelect" class="form-control input-sm" ng-init="paginationOptions.itemsPerPage = '10'" ng-model="paginationOptions.itemsPerPage"
ng-change="reloadGrid()">
<option>5</option>
<option>10</option>
<option>50</option>
<option>75</option>
</select>
</div>
</form>
</div>
</div>
</div>
</div>

</body>

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script><!-- load jquery -->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-messages.min.js"></script>
<script src="https://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.14.3.js"></script>

<script src="../../dist/pagination.min.js"></script>
<script src="../../dist/dataGrid.min.js"></script>
<script src="js/serverPaginationApp.js"></script>
</html>
Loading