开发分页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/

最佳答案

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

<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);


这应该可以解决您的问题。

10-07 19:04
查看更多