example array angularjs angularjs-ng-repeat

angularjs - array - ng-repeat select



Filtrar una repeticiĆ³n Angular 1.2 ng con "track by" por una propiedad booleana (2)

La pista debe estar al final de la expresión:

<li ng-repeat="person in attendees | filter: {arrived: false } track by person.id">

Estoy intentando filtrar algunos elementos de la lista en función del valor de una propiedad booleana, pero no importa lo que haga, siempre se muestra la lista completa. Algunas de las cosas que probé han sido tan rotas que no se muestra nada, pero eso no es ni aquí ni allá. No puedo hacer que mi filtro funcione como se desea:

$scope.attendees = [ {"firstname":"Steve", "lastname":"Jobs", "arrived":true, "id":1} ,{"firstname":"Michelle", "lastname":"Jobs", "arrived":false, "id":2} ,{"firstname":"Adam", "lastname":"Smith", "arrived":true, "id":3} ,{"firstname":"Megan", "lastname":"Smith", "arrived":false, "id":4} ,{"firstname":"Dylan", "lastname":"Smith", "arrived":false, "id":5} ,{"firstname":"Ethan", "lastname":"Smith", "arrived":false, "id":6} ];

Usando el siguiente filtro ng-repeat:

<ul> <li ng-repeat="person in attendees track by person.id | filter:arrived:''false''"> {{person.lastname}}, {{person.firstname}} </li> </ul>

Siento que he probado todas las permutas que puedo encontrar referenciadas, la mayoría de las cuales provienen de varios resultados de búsqueda de StackOverflow:

  • filter:''arrived''
  • filter:arrived
  • filter:''person.arrived''
  • filter:person.arrived
  • filter:{arrived:true}
  • filter:{arrived:''true''}
  • filter:{person.arrived:true}
  • filter:{person.arrived:''true''}

También intenté crear una función de filtro personalizada:

$scope.isArrived = function(item) { return item.arrived; };

Y aplicarlo así:

  • filter:isArrived
  • filter:''isArrived''
  • filter:{isArrived(person)}
  • filter:isArrived(person)
  • filter:''isArrived(person)''

Ninguno de estos parece funcionar. ¿Qué me estoy perdiendo?

Aquí hay un plnkr que demuestra mi problema .


La respuesta de @Gruff es correcta, pero solo para dar una respuesta de una fuente oficial:

A partir de los documentos ng-repeat angulares:

Nota: track by siempre debe ser la última expresión :

<div ng-repeat="model in collection | orderBy: ''id'' as filtered_result track by model.id"> {{model.name}} </div>

También aparece en la parte "Argumentos" de los documentos:

Tenga en cuenta que la expresión de seguimiento debe ser la última, después de cualquier filtro y la expresión de alias.