Preciso criar uma lista de itens separados por vírgula:
<li ng-repeat="friend in friends">
<b ng-repeat="email in friend.email">{{email}}{{$last ? '' : ', '}}</b>...
</li>
De acordo com a documentação do AngularJS, nenhuma instrução de fluxo de controle é permitida em expressões. É por isso que o meu {{$last ? '' : ', '}}
não funciona.
Existe uma maneira alternativa de criar listas separadas por vírgula?
EDIT 1
existe algo mais simples que:
<span ng-show="!$last">, </span>
angularjs
angularjs-ng-repeat
Franck Freiburger
fonte
fonte
Respostas:
Você poderia fazer assim:
<b ng-repeat="email in friend.email">{{email}}{{$last ? '' : ', '}}</b>
..Mas eu gosto da resposta do Philipp :-)
fonte
($last && '' || ', ')
sempre deve render', '
?{{{true: '', false: ', '}[$last]}}
. Esta técnica é mais flexível do que usar.join
porque permite que os elementos da lista a cada ser membros de uma matriz, como:<b ng-repeat="friend in friends">{{friend.email}}{{{true: '', false: ', '}[$last]}}</b>
Basta usar a função interna do Javascript
join(separator)
para matrizes:fonte
join()
e escapar desativar HTML, mas há um lugar especial no inferno para isso;)Além disso:
E no modelo:
fonte
{{ itemsArray.join(', ') }}
?fonte
Você pode usar CSS para corrigi-lo também
Mas a resposta de Andy Joslin é melhor
Edit: Eu mudei de idéia, tive que fazer isso recentemente e acabei indo com um filtro de junção.
fonte
Eu acho que é melhor usar
ng-if
.ng-show
cria um elemento nodom
e define-odisplay:none
. Quanto maisdom
elementos você tiver, mais recursos o seu aplicativo se tornará e, em dispositivos com menos recursos, menosdom
elementos, melhor.TBH
<span ng-if="!$last">, </span>
parece ser uma ótima maneira de fazê-lo. É simples.fonte
Como essa pergunta é bastante antiga e o AngularJS teve tempo de evoluir desde então, agora isso pode ser facilmente alcançado usando:
<li ng-repeat="record in records" ng-bind="record + ($last ? '' : ', ')"></li>
.Observe que estou usando em
ngBind
vez de interpolação{{ }}
, pois é muito mais eficiente:ngBind
só será executado quando o valor passado realmente mudar. Os colchetes{{ }}
, por outro lado, serão sujos verificados e atualizados a cada $ digest, mesmo que não seja necessário. Fonte: aqui , aqui e aqui .Em uma nota final, todas as soluções aqui funcionam e são válidas até hoje. Eu realmente sou encontrado por aqueles que envolvem CSS, pois esse é mais um problema de apresentação.
fonte
Gosto da abordagem da simbu, mas não me sinto confortável em usar o primeiro ou o último filho. Em vez disso, apenas modifico o conteúdo de uma classe de lista-vírgula repetida.
fonte
Se você estiver usando o ng-show para limitar os valores, o processo
{{$last ? '' : ', '}}
não funcionará, pois ainda levará em consideração todos os valores.Resulta na adição de uma vírgula após o "último" valor , pois com ng-show ele ainda leva em consideração todos os 4 valores
Uma solução é adicionar um filtro diretamente ao ng-repeat
Resultados
fonte