私は既にページネーションを実装しています。 結果をフィルタリングした後で、ページ番号を更新したいと思います。フィルタリング後にAngularJSのページ分割を更新します
形態:
<input type="text" data-ng-model="search.name" data-ng-change="filter()"/>
リスト:
<li data-ng-repeat="data in filtered = (list | filter:search) | filter:search | startFrom:(currentPage-1)*entryLimit | limitTo:entryLimit">{{data.name}}</li>
ページネーション:
<pagination data-boundary-links="true" data-num-pages="noOfPages" data-current-page="currentPage" max-size="maxSize"></pagination>
コントローラ:
$scope.filter = function() {
window.setTimeout(function() { //wait for 'filtered' to be changed
$scope.noOfPages = Math.ceil($scope.filtered.length/$scope.entryLimit);
$scope.setPage = function(pageNo) {
$scope.currentPage = pageNo;
};
}, 10);
};
私の問題は、ページ番号をクリックした後、または入力フィールドに次の文字を入力した後でページ番号が更新されたことだけです。だから遅くまで一歩進んでいます。
EDIT:http://jsfiddle.net/eqCWL/2/
これはより良い解決策のように見えますが、ng-model = "search"をng-model "search.name"に変更すると、それは壊れそうです。これが原因です。私は複数の列をフィルタリングできるようにしたいので、これを求めています – Gabe
watch式を 'search.name'にも変更します。 $ watchCollectionがあなたの場合に使用するものであるかどうかを検討したいかもしれません。オブジェクトのプロパティを見ることができます。 – nackjicholson
私はすでに$ watch関数の3番目のパラメータを知っていましたが、$ watchCollectionがさらに優れていると思います。ありがとうございました。 – Gabe