Katakanlah Anda memiliki array yang diberikan dalam ul
dengan li
untuk setiap elemen dan properti pada controller yang disebut selectedIndex
. Apa yang akan menjadi cara terbaik untuk menambahkan kelas li
dengan indeks selectedIndex
di AngularJS?
Saat ini saya sedang menduplikasi (dengan tangan) li
kode dan menambahkan kelas ke salah satu li
tag dan menggunakan ng-show
dan ng-hide
hanya menampilkan satu li
per indeks.
Jawaban:
Jika Anda tidak ingin memasukkan nama kelas CSS ke Controller seperti yang saya lakukan, ini adalah trik lama yang saya gunakan sejak pra-v1 hari. Kami dapat menulis ekspresi yang mengevaluasi langsung ke nama kelas yang dipilih , tidak ada arahan khusus yang diperlukan:
Harap perhatikan sintaks lama dengan titik dua.
Ada juga cara baru yang lebih baik untuk menerapkan kelas secara kondisional, seperti:
Angular sekarang mendukung ekspresi yang mengembalikan objek. Setiap properti (nama) objek ini sekarang dianggap sebagai nama kelas dan diterapkan tergantung pada nilainya.
Namun cara-cara ini secara fungsional tidak sama. Berikut ini sebuah contoh:
Karena itu kami dapat menggunakan kembali kelas CSS yang ada dengan memetakan properti model pada nama kelas dan pada saat yang sama menjauhkan kelas CSS dari kode Pengontrol.
sumber
($index==selectedIndex) ? 'selected' : ''
?{classname: '$index === selectedIndex'}
dan tidak berfungsi. Ketika saya menyatukan semuanya dan menggunakan == alih-alih === itu berhasil.{classname: '$index==selectedIndex'}
ng-class mendukung ekspresi yang harus dievaluasi
Jadi, menggunakan form 3) kita cukup menulis
Lihat juga Bagaimana saya menerapkan gaya CSS secara bersyarat di AngularJS? untuk jawaban yang lebih luas.
Pembaruan : Angular 1.1.5 telah menambahkan dukungan untuk operator ternary , jadi jika konstruk itu lebih familier bagi Anda:
sumber
ng-class="{'selected': $index==selectedIndex}"
bekerja untuk sayaMetode favorit saya adalah menggunakan ekspresi ternary.
Catatan: Jika Anda menggunakan versi Angular yang lebih lama, Anda harus menggunakan ini sebagai gantinya,
sumber
ng-class="property.name=='timestamp' ? 'property-timestamp' : 'property-'+{{$index}}"
. Tidak dapat menemukan cara lain.Saya akan menambahkan ini, karena beberapa jawaban ini sepertinya sudah ketinggalan zaman. Begini cara saya melakukannya:
Di mana 'isSelected' adalah variabel javascript yang didefinisikan dalam pengontrol bersudut scoped.
Untuk lebih spesifik menjawab pertanyaan Anda, inilah cara Anda dapat membuat daftar dengan itu:
HTML
JS
Lihat: http://jsfiddle.net/tTfWM/
Lihat: http://docs.angularjs.org/api/ng.directive:ngClass
sumber
ng-class:className
vs hanya menggunakanclass="{{className}}"
?Berikut ini adalah solusi yang lebih sederhana:
sumber
Saya menghadapi masalah yang sama baru-baru ini dan memutuskan untuk hanya membuat filter bersyarat:
Dibutuhkan argumen tunggal, yang merupakan array 2-elemen atau string, yang akan berubah menjadi array yang ditambahkan string kosong sebagai elemen kedua:
sumber
filter('yesNo', function() { return function(input) { // info('yesNo('+ input +')'); switch(input){ case '1': return ' yes '; break; default: return ' no '; break; } } });
Jika Anda ingin melampaui evaluasi biner dan menjauhkan CSS dari pengontrol Anda, Anda dapat menerapkan filter sederhana yang mengevaluasi input terhadap objek peta:
Ini memungkinkan Anda untuk menulis markup Anda seperti ini:
sumber
Saya baru-baru ini melakukan yang melakukan ini:
The
isShowing
nilai adalah nilai yang terletak di controller saya yang akan toggle dengan klik tombol dan bagian-bagian antara kurung tunggal kelas saya buat dalam file css saya.EDIT: Saya juga ingin menambahkan bahwa codeschool.com memiliki kursus gratis yang disponsori oleh google di AngularJS yang membahas semua hal ini dan kemudian beberapa. Tidak perlu membayar apa pun, cukup daftar untuk akun dan mulai! Semoga sukses untuk Anda semua!
sumber
isShowing
array di controller itu?Operator ternary baru saja ditambahkan ke parser sudut di 1.1.5 .
Jadi cara paling sederhana untuk melakukan ini adalah sekarang:
sumber
class="otherClass ng-class:($index==selectedIndex)? 'selected' : '';"
.Kita dapat membuat fungsi untuk mengelola kelas kembali dengan kondisi
Lalu
Anda dapat merujuk ke halaman kode lengkap di kelas ng misalnya
sumber
Saya baru mengenal Angular tetapi telah menemukan ini untuk menyelesaikan masalah saya:
Ini akan secara kondisional menerapkan kelas berdasarkan var. Dimulai dengan ikon-unduhan sebagai default, menggunakan kelas-ng, saya memeriksa status
showDetails
jikatrue/false
dan menerapkan kelas -ikon unggah . Ini bekerja dengan baik.Semoga ini bisa membantu.
sumber
Ini berfungsi seperti pesona;)
sumber
Ini mungkin akan diturunkan untuk dilupakan, tetapi di sini adalah bagaimana saya menggunakan operator ternary 1.1.5 untuk beralih kelas tergantung pada apakah baris dalam tabel adalah yang pertama, tengah atau terakhir - kecuali jika hanya ada satu baris dalam tabel:
sumber
Ini dalam pekerjaan saya, beberapa hakim kondisional:
sumber
Berikut adalah opsi lain yang berfungsi dengan baik ketika ng-class tidak dapat digunakan (misalnya saat menata SVG):
(Saya pikir Anda harus menggunakan Angular terbaru yang tidak stabil untuk menggunakan ng-attr-, saya saat ini di 1.1.4)
sumber
baik saya akan menyarankan Anda untuk memeriksa kondisi di controller Anda dengan fungsi yang mengembalikan benar atau salah .
dan di controller Anda periksa kondisinya
sumber
sebagian
pengontrol
sumber
Jika Anda menggunakan sudut pra v1.1.5 (yaitu tidak ada operator ternary) dan Anda masih menginginkan cara yang setara untuk menetapkan nilai di kedua kondisi Anda dapat melakukan sesuatu seperti ini:
sumber
Jika Anda memiliki kelas umum yang diterapkan ke banyak elemen, Anda dapat membuat arahan khusus yang akan menambahkan kelas itu seperti ng-show / ng-hide.
Arahan ini akan menambahkan kelas 'aktif' ke tombol jika diklik
Info lebih lanjut
sumber
Hanya menambahkan sesuatu yang bekerja untuk saya hari ini, setelah banyak mencari ...
Semoga ini membantu dalam pengembangan sukses Anda.
=)
Sintaks Ekspresi Tidak Berdokumen: Tautan Situs Web Hebat ... =)
sumber
Lihat ini .
if|else
Pernyataan AngularJS yang terkenal !!!Ketika saya mulai menggunakan Angularjs, saya agak terkejut bahwa saya tidak dapat menemukan pernyataan if / else.
Jadi saya sedang mengerjakan sebuah proyek dan saya perhatikan bahwa ketika menggunakan pernyataan if / else, kondisi tersebut menunjukkan saat memuat. Anda dapat menggunakan ng-jubah untuk memperbaikinya.
.ng-cloak { display: none }
Terima kasih amadou
sumber
Kamu bisa menggunakan paket npm ini . Ini menangani semuanya dan memiliki opsi untuk kelas statis dan bersyarat berdasarkan pada variabel atau fungsi.
sumber