如何在Angular中获取我的过滤重复数组的长度?

时间:2014-02-25 05:23:54

标签: javascript angularjs

我正在尝试在我的角度应用程序中实现分页。我有1000多本书,我希望我的currentPage / totalPages vars根据filter编辑ngRepeat进行更新。

这是我目前的Angular代码:

function Books($scope, $http, $rootScope){
    $scope.books = [1000+ books];
    $scope.filteredbooks = [];

    $scope.numberOfPages = function(){
        return Math.ceil($scope.filteredbooks.length / $scope.pageSize);
    }
}

我的下一个/上一个按钮:

<button ng-disabled="currentPage == 0" ng-click="currentPage=currentPage-1">
     Previous
</button>
{{currentPage+1}}/{{numberOfPages()}}
<button ng-disabled="currentPage >= data.length/pageSize - 1" 
        ng-click="currentPage=currentPage+1">
     Next
</button>

这是我的ngRepeat:

<tr ng-repeat="book in (filteredbooks = books | filter: search) | 
               orderBy: 'title' | startFrom: currentPage * pageSize | 
               limitTo: pageSize">
     {{book.title}}
</tr>

我的问题是filteredbooks中的ngRepeat未设置$scope.filteredbooks,因此我的总页数不会更新。有没有办法做到这一点?

还有一个事件或指令,我可以在搜索词被更改时将我的$scope.currentPage设置为0?

提前致谢!

编辑:这是一个带有搜索框的示例的小提琴:http://jsfiddle.net/4LRbN/

2 个答案:

答案 0 :(得分:1)

您可以使用功能告诉页面从哪里开始。

DEMO

在Angular中,您已经有了内置函数limitTo,所以我们只是添加startFrom函数,以便它可以跟踪结果的位置。

{{(data.length}}将为您提供结果总数。 {{(data|filter:searchterm).length}}会为您提供过滤结果的数量。

更新了 fiddle

我还建议您查看Angular wiki here上的示例小提琴。

答案 1 :(得分:1)