1

Проблема заключается в том, что фильтр поиска находит только записи с текущей страницы, и я хочу, чтобы она находила запись из всей таблицы. Как я могу это сделать?Угловой поисковый фильтр не осуществляет поиск по всей таблице

<input type="text" placeholder="Search By Any..." ng-model="search.$"/> 
<table dir="ltr" width="477" border="1" class="table table-striped table-bordered"> 
    <thead> 
     <tr> 
      <th><a style="font-size: 16px;" href="#" ng-click="changeSort('name')">User</a></th> 
      <th><a style="font-size: 16px;" href="#" ng-click="changeSort('contentType')">Content Type</a></th> 
      <th><a style="font-size: 16px;" href="#" ng-click="changeSort('contentName')">Content Name</a></th> 
      <th><a style="font-size: 16px;" href="#" ng-click="changeSort('startTime')">Start Time</a></th> 
      <th><a style="font-size: 16px;" href="#" ng-click="changeSort('endTime')">End Time</a></th> 
      <th><a style="font-size: 16px;" href="#" ng-click="changeSort('duration')">Duration(In Secs)</a></th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr ng-repeat="record in filteredRecords | filter: search | orderBy:sort:reverse track by $index"> 
      <td>{{record.user}}</td> 
      <td>{{record.contentType}}</td> 
      <td>{{record.contentName}}</td> 
      <td>{{record.startTime}}</td> 
      <td>{{record.endTime}}</td> 
      <td>{{record.duration}}</td> 
     </tr> 
    </tbody> 
</table> 
<pagination class="pull-right" style="cursor: pointer;" num-pages="numPages()" current-page="currentPage" on-select-page="pageChanged(page)"></pagination> 

Угловой код:

angular.module("contentViewStatusApp") 
     .controller("contentViewStatusController", function($scope, contentViewStatusService){ 
    $scope.records = contentViewStatusService.list(); 
    $scope.currentPage = 1 
    $scope.numPerPage = 10 
    $scope.maxSize = 5; 
    $scope.numPages = function(){ 
     return Math.ceil($scope.records.length/$scope.numPerPage); 
    }; 
    $scope.changeSort = function(value){ 
     if ($scope.sort == value){ 
      $scope.reverse = !$scope.reverse; 
      return; 
     } 
     $scope.sort = value; 
     $scope.reverse = false; 
    } 
    $scope.$watch('currentPage + numPerPage', function(){ 
     var begin = (($scope.currentPage - 1) * $scope.numPerPage), end = begin + $scope.numPerPage; 
     $scope.filteredRecords = $scope.records.slice(begin, end); 
    }); 
}); 

ответ

4

Вы можете сделать нумерацию страниц с помощью фильтров вместо создания другого массива. Таким образом, он будет выполнять поиск по всему массиву до его фильтрации.

This page показывает пример разбивки на страницы с фильтрами.

Тогда вы можете просто сначала выполнить поисковый запрос, и он должен выполнить поиск по всему массиву.

Update

Here's один с нумерацией страниц, что обновления на основе поиска текста.

Он смотрит текст поиска и обновляет диапазон страниц после фильтрации:

$scope.$watch('searchText.name', function (v) { 
    $scope.currentPage = 0; 
    $scope.pages = $scope.range(); 
}); 

Затем pageCount обновляется на основе отфильтрованных результатов:

$scope.pageCount = function() { 
    var pages = $filter('filter')($scope.items, $scope.searchText); 
    return Math.ceil(pages.length/$scope.itemsPerPage); 
}; 
+0

Большое спасибо за ответ, я делаю это так: [link] (http://jsfiddle.net/2c4xx42e/), но единственная проблема заключается в том, что разбиение на страницы не обновляется, когда размер страницы уменьшается, может u пожалуйста, помогите –

+1

Вот один из них с разбивкой на страницы, который обновляет http://jsfiddle.net/2c4xx42e/1/ .. Единственное, чего не хватает, - это текущая страница не остается посередине диапазона .. но это приятно в целом –

3

Да, я согласен с @agreco но Я думаю, вы должны определить отфильтрованные записи таким образом, чтобы они всегда работали с вашим search.$ model. Чтобы сделать это, взгляните на this fiddle.

Надеюсь, это решает вашу проблему. удачи.

Смежные вопросы