开发分页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>
小提琴: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);
这应该可以解决您的问题。