我可以在angularjs中使用严格的过滤器来搜索所有页面吗?

时间:2014-10-03 01:11:21

标签: javascript angularjs pagination

我在开发分页div并尝试使用严格数据进行搜索时遇到了问题。我想要做的是搜索所有页面,而不仅仅是实际页面。对不起,如果我的英语不好,希望你明白我想做什么,这里有一个帮助你理解我的意思的Jsfiddle例子。

<div ng-controller="pageCtrl">
    <label for="searchByName">Search by Name:</label>
    <input name="searchByName" type="text" ng-model="search.NOMBRE" placeholder="Nombre" />
    <label for="searchByLevel">Search by Level</label>
    <select name="searchByLevel" ng-model="search.ESCALON_CONFIANZA">
        <option value="">All</option>
        <option ng-repeat="n in [1,2,3,4,5,6]" value="{{n}}">Nivel {{n}}</option>
    </select>
    <ul>
        <li ng-repeat="data in filtered | startFrom:(currentPage-1)*entryLimit | limitTo:entryLimit | filter:search:strict">{{data.NOMBRE}}, {{data.ESCALON_CONFIANZA}}</li>
    </ul>
    <pagination data-boundary-links="true" data-num-pages="noOfPages" data-current-page="currentPage" max-size="maxSize" class="pagination-small" data-previous-text="&laquo;" data-next-text="&raquo;"></pagination>
</div>

小提琴:http://jsfiddle.net/neox55/uL4khjo7/

1 个答案:

答案 0 :(得分:1)

您是否尝试重新排序过滤器,以便在>限制数据以进行分页之前进行搜索?

<li ng-repeat="data in filtered | filter:search:strict | startFrom:(currentPage-1)*entryLimit | limitTo:entryLimit ">{{data.NOMBRE}}, {{data.ESCALON_CONFIANZA}}</li>

编辑要通过分页回答您的问题:您的小提琴中的$ watch无法正常工作,这就是您的页码永远不会被重新计算的原因。默认情况下,$ watch检查会根据引用不等式进行更改,因此您需要$ watch监视每个单独的更改变量(例如$ scope.search.NOMBRE,而不仅仅是$ scope.search,其引用不会更改)或使用可选参数objectEquality基于angular.equals进行检查。如果您的对象很复杂,这可能会对性能产生负面影响,但是由于您的搜索项目,我建议尝试这样的事情:

$scope.$watch('search', function (term) {
    $scope.filtered = filterFilter($scope.list, term);
    $scope.size = $scope.filtered.length;
    $scope.noOfPages = Math.ceil($scope.filtered.length / $scope.entryLimit);
}, true);

这可以解决您的问题。