Pregunta Filtrar una repetición Angular 1.2 ng con "track by" por una propiedad booleana


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.


74
2018-01-28 20:32


origen


Respuestas:


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

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

237
2018-01-28 21:01



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

Desde el angular ng-repeat documentos:

Nota: track by debe ser siempre 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.


1
2018-04-24 13:00