Riutilizzo di un filtro Angular.js - Visualizza / Controller
Questa soluzione riguarda il riutilizzo dei filtri angolari. Il che è un altro modo per filtrare i dati e Google mi ha portato qui quando ne avevo bisogno; e mi piace condividere.
Caso d'uso
Se stai già filtrando, ad esempio in una ripetizione ng nella tua vista (come sotto), allora potresti aver definito un filtro nel controller come segue di seguito. E poi puoi riutilizzare come negli esempi finali.
Esempio di utilizzo del filtro - Ripeti filtrato nella vista
<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>
Esempio di definizione del filtro angolare
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 };
})
Quindi, il concetto qui è che stai già usando un filtro creato per la tua vista, e poi ti rendi conto che vorresti usarlo anche nel tuo controller.
Funzione filtro Uso all'interno del controller Esempio 1
var dup = $filter('filter')($scope.people, $scope.searchDuplicate, true)
Funzione filtro Uso all'interno del controller Esempio 2
Mostra un pulsante solo se non vengono trovati duplicati, utilizzando il filtro precedente.
Pulsante HTML
<div ng-if="showButton()"><button class="btn btn-primary" ng-click="doSomething();"></button></div>
Mostra / nascondi pulsante
$scope.doSomething = function(){ /* ... */ };
$scope.showButton = function(){ return $filter('filter')($scope.people, $scope.searchDuplicate, true).length == 0; };
Alcuni potrebbero trovare semplice questa versione del filtro ed è un'opzione Angular.js.
Il parametro di confronto opzionale "true" utilizzato nella vista e nella chiamata della funzione $ filter specifica che si desidera un confronto rigoroso. Se si omette, è possibile cercare valori su più colonne.
https://docs.angularjs.org/api/ng/filter/filter