Necesito crear una lista de elementos separados por comas:
<li ng-repeat="friend in friends">
<b ng-repeat="email in friend.email">{{email}}{{$last ? '' : ', '}}</b>...
</li>
De acuerdo con la documentación de AngularJS, no se permiten declaraciones de flujo de control en las expresiones. Por eso mi{{$last ? '' : ', '}}
no funciona.
¿Hay alguna forma alternativa de crear listas separadas por comas?
EDITAR 1
¿hay algo más simple que:
<span ng-show="!$last">, </span>
angularjs
angularjs-ng-repeat
Franck Freiburger
fuente
fuente
Respuestas:
Podrías hacerlo de esta manera:
<b ng-repeat="email in friend.email">{{email}}{{$last ? '' : ', '}}</b>
..Pero me gusta la respuesta de Philipp :-)
fuente
($last && '' || ', ')
ceder siempre', '
?{{{true: '', false: ', '}[$last]}}
. Esta técnica es más flexible que el uso.join
porque permite que los elementos de la lista sean miembros de una matriz, como:<b ng-repeat="friend in friends">{{friend.email}}{{{true: '', false: ', '}[$last]}}</b>
Simplemente use la función incorporada de Javascript
join(separator)
para las matrices:fuente
join()
y deshabilitar el escape de HTML, pero hay un lugar especial en el infierno para eso;)También:
Y en plantilla:
fuente
{{ itemsArray.join(', ') }}
?fuente
Puedes usar CSS para arreglarlo también
Pero la respuesta de Andy Joslin es la mejor
Editar: cambié de opinión, tenía que hacer esto recientemente y terminé con un filtro de combinación.
fuente
Creo que es mejor usarlo
ng-if
.ng-show
crea un elemento endom
y lo establecedisplay:none
. Cuantos másdom
elementos tenga, más recursos necesitará su aplicación, y en dispositivos con menos recursos, menosdom
elementos, mejor.TBH
<span ng-if="!$last">, </span>
parece ser una excelente manera de hacerlo. Es sencillo.fuente
Como esta pregunta es bastante antigua y AngularJS ha tenido tiempo de evolucionar desde entonces, ahora se puede lograr fácilmente usando:
<li ng-repeat="record in records" ng-bind="record + ($last ? '' : ', ')"></li>
.Tenga en cuenta que estoy usando en
ngBind
lugar de la interpolación,{{ }}
ya que es mucho más eficiente:ngBind
solo se ejecutará cuando el valor pasado realmente cambie. Los corchetes{{ }}
, por otro lado, serán revisados y actualizados en cada $ digest, incluso si no es necesario. Fuente: aquí , aquí y aquí .En una nota final, todas las soluciones aquí funcionan y son válidas hasta el día de hoy. Realmente me encuentro con aquellos que involucran CSS ya que esto es más un problema de presentación.
fuente
Me gusta el enfoque de simbu, pero no me siento cómodo con el primer hijo o el último hijo. En cambio, solo modifico el contenido de una clase repetida de lista-coma.
fuente
Si está utilizando ng-show para limitar los valores,
{{$last ? '' : ', '}}
no funcionará, ya que aún tendrá en cuenta todos los valores.Resulta en agregar una coma después del "último" valor , ya que con ng-show todavía tiene en cuenta los 4 valores
Una solución es agregar un filtro directamente en ng-repeat
Resultados
fuente