AngularJS – Come strutturare un filtro personalizzato con ng-repeat per restituire gli articoli in modo condizionale

Ho una ng-repeat che stampa gli elementi della lista. Voglio scrivere un filtro personalizzato in modo che la lista venga stampata, solo se una condizione è vera.

Mi sembra di avere la struttura sbagliata in quanto sembra che le variabili non vengano passate al filtro.

index.php

 

app.js

 userApp.filter('matchAccessLevel', function() { return function( item, userAccessLevel, minAccessLevel ) { if( userAccessLevel >= minAccessLevel ) { return item; } } }); 

I filtri non funzionano sui singoli elementi dell’array, trasformano l’intero array in un altro array.

 userApp.filter('matchAccessLevel', function() { return function( items, userAccessLevel) { var filtered = []; angular.forEach(items, function(item) { if(userAccessLevel >= item.minAccess) { filtered.push(item); } }); return filtered; }; }); 

Vedi questo plnkr

** controlla sempre gli argomenti di una funzione. Non è sempre ovvio quali sono i valori. *

vedi la guida ai filtri

È ansible utilizzare Array.filter per una soluzione più concisa:

 app.filter('matchAccessLevel', function() { return function( items, userAccessLevel ) { return items.filter(function(element){ return userAccessLevel >= element.minAccess; }); } }); 

Controlla su Plunker

Per gli amanti di CoffeeScript:

 userApp.filter 'matchAccessLevel', -> (items, userAccessLevel) -> item for item in items when userAccessLevel >= item.minAccess