Повторне використання фільтра Angular.js - Перегляд / контролер
Це рішення охоплює повторне використання кутових фільтрів. Це ще один спосіб фільтрації даних, і Google посадив мене сюди, коли мені потрібно було; і мені подобається ділитися.
Використовуйте кейс
Якщо ви вже фільтруєте, скажімо, у ng-повторі у вашому перегляді (як показано нижче), то, можливо, ви визначили фільтр у контролері, як далі. І тоді ви можете повторно використовувати, як у заключних прикладах.
Приклад використання фільтра - повтор фільтрування в режимі перегляду
<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", який використовується у поданні та у виклику функції фільтра $, вказує на необхідність суворого порівняння. Якщо опустити, значення можна шукати у кількох стовпцях.
https://docs.angularjs.org/api/ng/filter/filter