Note that there are some explanatory texts on larger screens.

plurals
  1. POAngular pagination reverse jumping
    primarykey
    data
    text
    <p>I have this table:</p> <p><img src="https://i.stack.imgur.com/LmZfw.png" alt="enter image description here"></p> <p>Here is a code and <kbd><a href="http://jsfiddle.net/SAWsA/891/" rel="nofollow noreferrer">Fiddle</a></kbd>:</p> <p><strong>HTML</strong></p> <pre><code>&lt;table class="table table-striped table-condensed table-hover"&gt; &lt;thead&gt; &lt;tr&gt; &lt;th class="id"&gt;Id&amp;nbsp;&lt;a ng-click="sort_by('id')"&gt;&lt;i class="icon-sort"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/th&gt; &lt;th class="name"&gt;Name&amp;nbsp;&lt;a ng-click="sort_by('name')"&gt;&lt;i class="icon-sort"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/th&gt; &lt;th class="description"&gt;Description&amp;nbsp;&lt;a ng-click="sort_by('description')"&gt;&lt;i class="icon-sort"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/th&gt; &lt;th class="field3"&gt;Field 3&amp;nbsp;&lt;a ng-click="sort_by('field3')"&gt;&lt;i class="icon-sort"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/th&gt; &lt;th class="field4"&gt;Field 4&amp;nbsp;&lt;a ng-click="sort_by('field4')"&gt;&lt;i class="icon-sort"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/th&gt; &lt;th class="field5"&gt;Field 5&amp;nbsp;&lt;a ng-click="sort_by('field5')"&gt;&lt;i class="icon-sort"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tfoot&gt; &lt;td colspan="6"&gt; &lt;div class="pagination pull-right"&gt; &lt;ul&gt; &lt;li ng-class="{disabled: currentPage == 0}"&gt; &lt;a href ng-click="prevPage()"&gt;« Prev&lt;/a&gt; &lt;/li&gt; &lt;li ng-repeat="n in range(pagedItems.length, currentPage, currentPage + gap) " ng-class="{active: n == currentPage}" ng-click="setPage()"&gt; &lt;a href ng-bind="n + 1"&gt;1&lt;/a&gt; &lt;/li&gt; &lt;li ng-class="{disabled: (currentPage) == pagedItems.length - 1}"&gt; &lt;a href ng-click="nextPage()"&gt;Next »&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/td&gt; &lt;/tfoot&gt; &lt;pre&gt;pagedItems.length: {{pagedItems.length|json}}&lt;/pre&gt; &lt;pre&gt;currentPage: {{currentPage|json}}&lt;/pre&gt; &lt;tbody&gt; &lt;tr ng-repeat="item in pagedItems[currentPage] | orderBy:sortingOrder:reverse"&gt; &lt;td&gt;{{item.id}}&lt;/td&gt; &lt;td&gt;{{item.name}}&lt;/td&gt; &lt;td&gt;{{item.description}}&lt;/td&gt; &lt;td&gt;{{item.field3}}&lt;/td&gt; &lt;td&gt;{{item.field4}}&lt;/td&gt; &lt;td&gt;{{item.field5}}&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; </code></pre> <p><strong>JS</strong></p> <pre><code>function ctrlRead($scope, $filter) { // init $scope.sortingOrder = 'name'; $scope.gap = 5; $scope.cached = 0; $scope.reverse = false; $scope.filteredItems = []; $scope.groupedItems = []; $scope.itemsPerPage = 5; $scope.pagedItems = []; $scope.currentPage = 0; $scope.items = [ {"id":1,"name":"name 1","description":"description 1","field3":"field3 1","field4":"field4 1","field5 ":"field5 1"}, {"id":2,"name":"name 2","description":"description 1","field3":"field3 2","field4":"field4 2","field5 ":"field5 2"}, //.... ]; var searchMatch = function (haystack, needle) { if (!needle) { return true; } return haystack.toLowerCase().indexOf(needle.toLowerCase()) !== -1; }; // init the filtered items $scope.search = function () { $scope.filteredItems = $filter('filter')($scope.items, function (item) { for(var attr in item) { if (searchMatch(item[attr], $scope.query)) return true; } return false; }); // take care of the sorting order if ($scope.sortingOrder !== '') { $scope.filteredItems = $filter('orderBy')($scope.filteredItems, $scope.sortingOrder, $scope.reverse); } $scope.currentPage = 0; // now group by pages $scope.groupToPages(); }; // calculate page in place $scope.groupToPages = function () { $scope.pagedItems = []; for (var i = 0; i &lt; $scope.filteredItems.length; i++) { if (i % $scope.itemsPerPage === 0) { $scope.pagedItems[Math.floor(i / $scope.itemsPerPage)] = [ $scope.filteredItems[i] ]; } else { $scope.pagedItems[Math.floor(i / $scope.itemsPerPage)].push($scope.filteredItems[i]); } } }; $scope.range = function (size,start, end) { if( $scope.cached == start){ start = start - 4; console.log('start',start); } $scope.cached = start; var ret = []; console.log(size,start, end); if(size &lt; 2){return ret;} if (size &lt; end) { end = size; start = size-$scope.gap; } for (var i = start; i &lt; end; i++) { if(i&lt;0) continue; ret.push(i); } console.log(ret); return ret; }; $scope.prevPage = function () { if ($scope.currentPage &gt; 0) { $scope.currentPage--; } }; $scope.nextPage = function () { if ($scope.currentPage &lt; $scope.pagedItems.length - 1) { $scope.currentPage++; } }; $scope.setPage = function () { $scope.currentPage = this.n; }; // functions have been describe process the data for display $scope.search(); // change sorting order $scope.sort_by = function(newSortingOrder) { if ($scope.sortingOrder == newSortingOrder) $scope.reverse = !$scope.reverse; $scope.sortingOrder = newSortingOrder; }; }; ctrlRead.$inject = ['$scope', '$filter']; </code></pre> <p>From the code you can see that we have 13 groups of 5 rows.</p> <p>If I press in pagination on 5, the <code>5</code> button jumps to 1st place and last place is <code>9</code>. </p> <p>By this way I can "travel" quickly over all data.</p> <p>My problem that I don't know how to make it wok to jump back a.e reverse.</p> <p>For example if I stay on 13:</p> <p><img src="https://i.stack.imgur.com/RVm5z.png" alt="enter image description here"></p> <p>and I press on <code>9</code> I expect that <code>9</code> will jump to the end of pagination and 1st element in list will be <code>5</code>.</p> <p>How to achieve that?</p> <p>Thank you,</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload