Повторное использование фильтра Angular.js - представление / контроллер
Это решение охватывает повторное использование угловых фильтров. Это еще один способ фильтрации данных, и Google высадил меня здесь, когда мне это было нужно; и я хотел бы поделиться.
Случай использования
Если вы уже выполняете фильтрацию, скажем, в виде ng-repeat (как показано ниже), тогда вы могли бы определить фильтр в контроллере следующим образом. И тогда вы можете использовать повторно, как в последних примерах.
Пример использования фильтра - отфильтрованный повтор в представлении
<div ng-app="someApp" ng-controller="someController">
<h2>Duplicates</h2>
<table class="table table-striped table-light table-bordered-light">
<thead>
<tr>
<th>Name</th>
<th>Gender</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="person in data | filter: searchDuplicate:true">
<td>{{person.name}}</td>
<td>{{person.gender}}</td>
</tr>
</tbody>
</table>
</div>
Пример определения углового фильтра
angular.module('someApp',[])
.controller('someController', function($scope, $filter ) {
$scope.people = [{name: 'Bob', gender: 'male' , hasDuplicate: true },
{name: 'Bob', gender: 'male' , hasDuplicate: true },
{name: 'Bob', gender: 'female', hasDuplicate: false}];
$scope.searchDuplicate = { hasDuplicate : true };
})
Итак, концепция здесь в том, что вы уже используете фильтр, созданный для вашего представления, а затем понимаете, что хотели бы использовать его и в своем контроллере.
Использование функции фильтра в контроллере Пример 1
var dup = $filter('filter')($scope.people, $scope.searchDuplicate, true)
Использование функции фильтра в контроллере Пример 2
Показывать кнопку только в том случае, если дубликаты не найдены, используя предыдущий фильтр.
Кнопка HTML
<div ng-if="showButton()"><button class="btn btn-primary" ng-click="doSomething();"></button></div>
Показать / Скрыть кнопку
$scope.doSomething = function(){ /* ... */ };
$scope.showButton = function(){ return $filter('filter')($scope.people, $scope.searchDuplicate, true).length == 0; };
Некоторые могут найти эту версию фильтрации легкой, и это опция Angular.js.
Необязательный параметр компаратора «true», используемый в представлении и в вызове функции $ filter, указывает на необходимость строгого сравнения. Если вы пропустите, можно искать значения по нескольким столбцам.
https://docs.angularjs.org/api/ng/filter/filter