我在开发分页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="«" data-next-text="»"></pagination>
</div>
答案 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);
这可以解决您的问题。