1

私はAngularJSで "limitTo"というフィルターを使用してデータを制限することを理解します。AngularJS limitToフィルター

私たちは100レコードあり、 limitToフィルターを使用してデータを10レコードに制限します。

残りの90個のレコードを表示するにはどうすればいいですか? 私はそれをクリックすると次の10のレコードを表示する必要があります 私は下部にいくつかの並べ替えの次と前のボタンが必要です。

どのようにパフォーマンスを損なうことなくこれを達成できますか?可能であれば、コードを入力してください。 ありがとう... :-)

+1

を見つけることができます見http://stackoverflow.com/questions/10816073/how-to-doを取ります-paging-in-angularjs –

答えて

0

フィルタlimitToには、オプションの開始パラメータがあります。

変数を設定します。あなたがボタンをクリックしたときに$scope.start = 0

あなたは、セットアップlimitTo : 10 : startとして、あなたのフィルタは、ちょうど10

angularjs limitTo documentation

1
startため limitTo docsがある引数パー

limit

{{ limitTo_expression | limitTo : limit : begin}} 
$scope.startをインクリメントすることができます

この単純な例では、これらの引数にスコープ変数を使用できます。

<p ng-repeat="item in items|limitTo:limit:start">{{item.name}}</p> 
<button ng-click="next()" ng-if="start < items.length-10">Next</button> 
<button ng-click="prev()" ng-if="start >0">Prev</button> 

JS

$scope.start = 0; 
    $scope.limit = 10; 
    $scope.items = [/* some data*/];  

    $scope.next = function() { 
    incrementLimit(true) 
    } 
    $scope.prev = function() { 
    incrementLimit(false) 
    } 

    function incrementLimit(up) { 
    if (up) { 
     ($scope.start <= ($scope.items.length - $scope.limit)) ? $scope.start += 10: $scope.start = 0; 
    } else { 
     $scope.start > 10 ? $scope.start -= 10 : $scope.start = 0; 

    } 
    } 

DEMO

0

documentationによるとuはUはこのexampを試すことができますthis-

{{ limitTo_expression | limitTo : limit : begin}} 

を使用している場合、それは自動的に行われます

var todos = angular.module('todos', ['ui.bootstrap']); 
 

 
todos.controller('TodoController', function($scope) { 
 
    $scope.filteredTodos = [] 
 
    ,$scope.currentPage = 1 
 
    ,$scope.numPerPage = 10 
 
    ,$scope.maxSize = 5; 
 
    
 
    $scope.makeTodos = function() { 
 
    $scope.todos = []; 
 
    for (i=1;i<=1000;i++) { 
 
     $scope.todos.push({ text:'todo '+i, done:false}); 
 
    } 
 
    }; 
 
    $scope.makeTodos(); 
 
    
 
    $scope.numPages = function() { 
 
    return Math.ceil($scope.todos.length/$scope.numPerPage); 
 
    }; 
 
    
 
    $scope.$watch('currentPage + numPerPage', function() { 
 
    var begin = (($scope.currentPage - 1) * $scope.numPerPage) 
 
    , end = begin + $scope.numPerPage; 
 
    
 
    $scope.filteredTodos = $scope.todos.slice(begin, end); 
 
    }); 
 
});
<link data-require="[email protected]" data-semver="2.3.2" rel="stylesheet" href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" /> 
 

 
<script data-require="[email protected]" data-semver="1.1.5" src="http://code.angularjs.org/1.1.5/angular.min.js"></script> 
 

 
<script data-require="[email protected]" data-semver="0.3.0" src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.3.0.min.js"></script> 
 

 

 
<h1>Todos</h1> 
 
<h4>{{todos.length}} remain</h4> 
 

 
<ul> 
 
    <li ng-repeat="todo in filteredTodos">{{todo.text}}</li> 
 
</ul> 
 
<div data-pagination="" data-num-pages="numPages()" 
 
    data-current-page="currentPage" data-max-size="maxSize" 
 
    data-boundary-links="true"> 
 
</div>

LE-のRunnableコードがhere-

http://plnkr.co/edit/ItgGWIq5ZhzgBYmWJ68y?p=preview