Я использую директиву Angular-utils-pagination, найденную здесь https://github.com/michaelbromley/angularUtils/tree/master/src/directives/pagination. Он работает так, как ожидалось, но последнее, что я хочу сделать, заключается в том, что пользователь может выбрать, к какому атрибуту объекта, который они хотят отфильтровать.
Ниже я до сих пор. Разметка Html:
<div class="row">
<div class="col-xs-4">
<h3>Current Page: {{ currentPage }}</h3>
<select ng-model="selectedFilter" ng-options="f for f in filterOptions"></select>
</div>
<div class="col-xs-4">
<label for="search">Search:</label>
<input ng-model="q" id="search" class="form-control" placeholder="Filter text">
</div>
<div class="col-xs-4">
<label for="search">items per page:</label>
<input type="number" min="1" max="100" class="form-control" ng-model="pageSize">
</div>
</div>
...
<tr dir-paginate="item in items | filter:{selectedFilter:q} | itemsPerPage: pageSize" current-page="currentPage">
Контроллер
$scope.currentPage = 1;
$scope.pageSize = 10;
$scope.filterOptions = [
'item','brand','category','gender','size'
];
// Note that items[] is populated on initialisation from the db.
$scope.items = [];
Когда я жестко кодирую фильтр, чтобы сказать фильтр по элементу, как показано ниже, он работает так, как ожидалось.
<tr dir-paginate="item in items | filter:{item:q} | itemsPerPage: pageSize" current-page="currentPage">
Можно ли настроить атрибут на переменную? Любая помощь приветствуется.
Благодарю.
Итак, вот что я закончил, с которым хорошо работает.
Разметка html: устанавливает раскрывающийся список с параметрами фильтра, которые вы хотите, поле для ввода критериев поиска. К концу это логика директивы dir-paginate.
<div class="row">
<div class="col-xs-3">
<label for="Filter">Search:</label>
<select ng-model="filter" id="Filter" class="form-control" ng-options="f for f in filterOptions"></select>
{{filter}}
</div>
<div class="col-xs-3">
<label for="search">Search On: <em>{{filter}} </em></label>
<input ng-model="search[filter]" id="search" class="form-control" placeholder="Filter text">
</div>
<div class="col-xs-2">
<label for="search">items per page:</label>
<input type="number" min="1" max="100" class="form-control" ng-model="pageSize">
</div>
</div>
...
<tr dir-paginate="item in items | filter:search | itemsPerPage: pageSize" current-page="currentPage">
Контроллер: когда вы выбираете параметр фильтра из раскрывающегося списка, он изменяет атрибут, выбранный в массиве поиска в пределах области. Это $ scope.search, на который ссылается директива dir-paginate.
$scope.currentPage = 1;
$scope.pageSize = 10;
$scope.search = {item:'', brand:'', category:'', itemId: '', $:''};
$scope.filterOptions = [
'item','itemId','brand','category','gender','size'
];