Saya perlu membuat daftar item yang dipisahkan koma:
<li ng-repeat="friend in friends">
<b ng-repeat="email in friend.email">{{email}}{{$last ? '' : ', '}}</b>...
</li>
Menurut dokumentasi AngularJS, tidak ada pernyataan aliran kontrol yang diizinkan dalam ekspresi. Inilah mengapa saya {{$last ? '' : ', '}}
tidak bekerja.
Apakah ada cara alternatif untuk membuat daftar yang dipisahkan koma?
EDIT 1
ada sesuatu yang lebih sederhana daripada:
<span ng-show="!$last">, </span>
angularjs
angularjs-ng-repeat
Franck Freiburger
sumber
sumber
Jawaban:
Anda bisa melakukannya dengan cara ini:
<b ng-repeat="email in friend.email">{{email}}{{$last ? '' : ', '}}</b>
..Tapi saya suka jawaban Philipp :-)
sumber
($last && '' || ', ')
selalu menghasilkan', '
?{{{true: '', false: ', '}[$last]}}
. Teknik ini lebih fleksibel daripada menggunakan.join
karena memungkinkan elemen-elemen dalam daftar untuk masing-masing menjadi anggota array, seperti:<b ng-repeat="friend in friends">{{friend.email}}{{{true: '', false: ', '}[$last]}}</b>
Cukup gunakan
join(separator)
fungsi bawaan Javascript untuk array:sumber
join()
dan menonaktifkan HTML melarikan diri, tetapi ada tempat khusus di neraka untuk itu;)Juga:
Dan di templat:
sumber
{{ itemsArray.join(', ') }}
?sumber
Anda dapat menggunakan CSS untuk memperbaikinya juga
Tapi jawaban Andy Joslin adalah yang terbaik
Sunting: Saya berubah pikiran, saya harus melakukan ini baru-baru ini dan akhirnya pergi dengan filter gabungan.
sumber
Saya pikir lebih baik digunakan
ng-if
.ng-show
menciptakan elemen dalamdom
dan menyetelnyadisplay:none
. Semakin banyakdom
elemen yang Anda habiskan, semakin banyak sumber daya yang dihabiskan aplikasi Anda, dan pada perangkat dengan sumber daya yang lebih rendah semakin sedikitdom
elemen yang lebih baik.TBH
<span ng-if="!$last">, </span>
sepertinya cara yang bagus untuk melakukannya. Itu mudah.sumber
Karena pertanyaan ini sudah cukup lama dan AngularJS memiliki waktu untuk berkembang sejak saat itu, ini sekarang dapat dengan mudah dicapai dengan menggunakan:
<li ng-repeat="record in records" ng-bind="record + ($last ? '' : ', ')"></li>
.Perhatikan bahwa saya menggunakan
ngBind
alih-alih interpolasi{{ }}
karena jauh lebih berkinerja:ngBind
hanya akan berjalan ketika nilai yang diteruskan benar-benar berubah. Kurung{{ }}
, di sisi lain, akan kotor diperiksa dan disegarkan setiap $ digest, bahkan jika itu tidak perlu. Sumber: sini , sini dan sini .Pada catatan akhir, semua solusi di sini berfungsi dan valid hingga hari ini. Saya benar-benar menemukan mereka yang melibatkan CSS karena ini lebih merupakan masalah presentasi.
sumber
Saya suka pendekatan simbu, tetapi saya tidak nyaman menggunakan anak pertama atau anak terakhir. Alih-alih, saya hanya memodifikasi konten kelas koma daftar berulang.
sumber
Jika Anda menggunakan ng-show untuk membatasi nilai,
{{$last ? '' : ', '}}
tidak akan berhasil karena masih akan mempertimbangkan semua nilai. ContohHasil dalam menambahkan koma setelah nilai "terakhir" , karena dengan ng-show itu masih mempertimbangkan semua 4 nilai
Salah satu solusinya adalah menambahkan filter langsung ke ng-repeat
Hasil
sumber