Wiederverwenden eines Angular.js-Filters - Ansicht / Controller
Diese Lösung behandelt die Wiederverwendung von Winkelfiltern. Dies ist eine weitere Möglichkeit, Daten zu filtern, und Google hat mich hier gelandet, als ich solche benötigte. und ich teile gerne.
Anwendungsfall
Wenn Sie bereits filtern, z. B. in einer ng-Wiederholung in Ihrer Ansicht (wie unten), haben Sie möglicherweise einen Filter in der Steuerung wie folgt definiert. Und dann können Sie wie in den letzten Beispielen wiederverwenden.
Beispiel für die Verwendung von Filtern - Gefilterte Wiederholung in der Ansicht
<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>
Beispiel für die Definition eines Winkelfilters
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 };
})
Das Konzept hier ist also, dass Sie bereits einen Filter verwenden, der für Ihre Ansicht erstellt wurde, und dann erkennen, dass Sie ihn auch in Ihrem Controller verwenden möchten.
Filterfunktion Verwendung innerhalb des Controllers Beispiel 1
var dup = $filter('filter')($scope.people, $scope.searchDuplicate, true)
Verwendung der Filterfunktion innerhalb des Controllers Beispiel 2
Zeigen Sie eine Schaltfläche nur an, wenn mit dem vorherigen Filter keine Duplikate gefunden wurden.
HTML-Taste
<div ng-if="showButton()"><button class="btn btn-primary" ng-click="doSomething();"></button></div>
Schaltfläche Ein- / Ausblenden
$scope.doSomething = function(){ /* ... */ };
$scope.showButton = function(){ return $filter('filter')($scope.people, $scope.searchDuplicate, true).length == 0; };
Einige mögen diese Version der Filterung als einfach empfinden, und es handelt sich um eine Angular.js-Option.
Der optionale Komparatorparameter "true", der in der Ansicht und im Funktionsaufruf $ filter verwendet wird, gibt an, dass Sie einen strengen Vergleich wünschen. Wenn Sie dies weglassen, können Sie über mehrere Spalten nach Werten suchen.
https://docs.angularjs.org/api/ng/filter/filter