KnockoutJS sintaks pengikat tanpa kontainer
Harap bersabar sebentar: KnockoutJS menawarkan opsi yang sangat nyaman untuk menggunakan sintaks pengikat tanpa kontainer untuk foreachpengikatannya seperti yang dibahas dalam Catatan 4 dari foreachdokumentasi penjilidan.
http://knockoutjs.com/documentation/foreach-binding.html
Seperti yang diilustrasikan oleh contoh dokumentasi Knockout, Anda dapat menulis binding Anda di KnockoutJS seperti ini:
<ul>
<li class="header">Header item</li>
<!-- ko foreach: myItems -->
<li>Item <span data-bind="text: $data"></span></li>
<!-- /ko -->
</ul>
Saya rasa cukup disayangkan AngularJS tidak menawarkan jenis sintaks ini.
Angular ng-repeat-startdanng-repeat-end
Dalam cara AngularJS untuk memecahkan ng-repeatmasalah, sampel yang saya temukan adalah tipe jmagnusson yang diposting dalam jawabannya (membantu).
<li ng-repeat-start="page in [1,2,3,4,5]"><a href="#">{{page}}</a></li>
<li ng-repeat-end></li>
Pikiran asli saya setelah melihat sintaks ini adalah: benarkah? Mengapa Angular memaksakan semua markup ekstra yang tidak ingin saya lakukan dan itu jauh lebih mudah di Knockout? Tapi kemudian komentar hitautodestruct dalam jawaban jmagnusson mulai membuat saya bertanya-tanya: apa yang dihasilkan dengan ng-repeat-start dan ng-repeat-end pada tag terpisah?
Cara yang lebih bersih untuk menggunakan ng-repeat-startdanng-repeat-end
Setelah menyelidiki pernyataan hitautodestruct, menambahkan ng-repeat-endke tag terpisah persis seperti yang tidak ingin saya lakukan dalam banyak kasus, karena menghasilkan elemen yang sama sekali tidak berguna: dalam hal ini, <li>item yang tidak memiliki apa pun di dalamnya. Daftar paginasi Bootstrap 3 mengatur gaya item daftar sehingga terlihat seperti Anda tidak menghasilkan item yang berlebihan, tetapi ketika Anda memeriksa html yang dihasilkan, mereka ada di sana.
Untungnya , Anda tidak perlu melakukan banyak hal untuk mendapatkan solusi yang lebih bersih dan jumlah html yang lebih pendek: cukup letakkan ng-repeat-enddeklarasi di tag html yang sama yang memiliki ekstensing-repeat-start .
<ul class="pagination">
<li>
<a href="#">«</a>
</li>
<li ng-repeat-start="page in [1,2,3,4,5]" ng-repeat-end><a href="#"></a></li>
<li>
<a href="#">»</a>
</li>
</ul>
Ini memberikan 3 keuntungan:
- lebih sedikit tag html untuk ditulis
- tidak berguna, tag kosong tidak dibuat oleh Angular
- ketika larik yang akan diulang kosong, tag dengan
ng-repeattidak akan dibuat, memberi Anda keuntungan yang sama dengan pengikatan tanpa kontainer Knockout yang memberi Anda dalam hal ini
Tapi masih ada cara yang lebih bersih
Setelah meninjau lebih lanjut komentar di github tentang masalah ini untuk Angular, https://github.com/angular/angular.js/issues/1891 ,
Anda tidak perlu menggunakan ng-repeat-startdan ng-repeat-endmendapatkan keuntungan yang sama. Sebagai gantinya, bercabang lagi contoh jmagnusson, kita bisa pergi:
<ul class="pagination">
<li>
<a href="#">«</a>
</li>
<li ng-repeat="page in [1,2,3,4,5,6]"><a href="#">{{page}}</a></li>
<li>
<a href="#">»</a>
</li>
</ul>
Jadi kapan harus digunakan ng-repeat-startdan ng-repeat-end? Sesuai dokumentasi sudut , untuk
... ulangi serangkaian elemen, bukan hanya satu elemen induk ...
Cukup bicara, tunjukkan beberapa contoh!
Cukup adil; jsbin ini menjelaskan lima contoh tentang apa yang terjadi saat Anda melakukannya dan saat Anda tidak menggunakan ng-repeat-endtag yang sama.