Q1. Misalkan saya ingin mengubah tampilan setiap "item" yang ditandai pengguna untuk dihapus sebelum tombol "hapus" utama ditekan. (Umpan balik visual langsung ini harus menghilangkan kebutuhan untuk kotak dialog "apakah Anda yakin?" Pepatah.) Pengguna akan memeriksa kotak centang untuk menunjukkan item mana yang harus dihapus. Jika kotak centang tidak dicentang, item itu harus kembali ke tampilan normal.
Apa cara terbaik untuk menerapkan atau menghapus gaya CSS?
Q2. Misalkan saya ingin mengizinkan setiap pengguna untuk mempersonalisasi bagaimana situs saya disajikan. Misalnya, pilih dari kumpulan ukuran font yang tetap, memungkinkan warna latar depan dan latar belakang yang dapat ditentukan pengguna, dll
Apa cara terbaik untuk menerapkan penataan CSS yang dipilih / input pengguna?
Jawaban:
Angular menyediakan sejumlah arahan bawaan untuk memanipulasi penataan CSS secara kondisional / dinamis:
"Cara sudut" normal melibatkan pengikatan properti model / lingkup ke elemen UI yang akan menerima input / manipulasi pengguna (yaitu, menggunakan model-ng), dan kemudian mengaitkan properti model itu ke salah satu arahan built-in yang disebutkan di atas.
Ketika pengguna mengubah UI, Angular akan secara otomatis memperbarui elemen terkait pada halaman.
Q1 terdengar seperti kasus yang bagus untuk ng-class - gaya CSS dapat ditangkap di kelas.
ng-class menerima "ekspresi" yang harus mengevaluasi ke salah satu dari yang berikut:
Dengan asumsi item Anda ditampilkan menggunakan ng-repeat pada beberapa model array, dan ketika kotak centang untuk item dicentang Anda ingin menerapkan
pending-delete
kelas:Di atas, kami menggunakan tipe ekspresi ng-class # 3 - peta / objek nama kelas ke nilai boolean.
Q2 terdengar seperti kasus yang bagus untuk gaya ng - gaya CSS dinamis, jadi kami tidak dapat menentukan kelas untuk ini.
ng-style menerima "ekspresi" yang harus dievaluasi untuk:
Untuk contoh yang dibuat-buat, misalkan pengguna dapat mengetikkan nama warna ke kotak teks untuk warna latar belakang (pemilih warna jQuery akan jauh lebih baik):
Biola untuk kedua hal di atas.
Biola juga berisi contoh ng-show dan ng-hide . Jika kotak centang dicentang, selain warna latar belakang berubah menjadi merah muda, beberapa teks ditampilkan. Jika 'merah' dimasukkan dalam kotak teks, sebuah div menjadi tersembunyi.
sumber
Saya telah menemukan masalah ketika menerapkan kelas di dalam elemen tabel ketika saya memiliki satu kelas yang sudah diterapkan ke seluruh tabel (misalnya, warna yang diterapkan pada baris aneh
<myClass tbody tr:nth-child(even) td>
). Tampaknya ketika Anda memeriksa elemen dengan Alat Pengembang ,element.style
gaya tidak ditugaskan. Jadi alih-alih menggunakanng-class
, saya sudah mencoba menggunakanng-style
, dan dalam hal ini, atribut CSS baru muncul di dalamnyaelement.style
. Kode ini sangat bagus untuk saya:Myvar adalah apa yang saya evaluasi, dan dalam setiap kasus saya menerapkan gaya untuk masing
<td>
- masing tergantung pada nilai myvar , yang menimpa gaya saat ini yang diterapkan oleh kelas CSS untuk seluruh tabel.MEMPERBARUI
Jika Anda ingin menerapkan kelas ke tabel misalnya, saat mengunjungi halaman atau dalam kasus lain, Anda dapat menggunakan struktur ini:
Pada dasarnya, apa yang kita butuhkan untuk mengaktifkan kelas-ng adalah kelas untuk diterapkan dan pernyataan benar atau salah. Benar berlaku kelas dan palsu tidak. Jadi di sini kita memiliki dua pemeriksaan rute halaman dan OR di antara mereka, jadi jika kita berada di
/route_a
OR kita berada diroute_b
, kelas aktif akan diterapkan.Ini berfungsi hanya memiliki fungsi logika di sebelah kanan yang mengembalikan benar atau salah.
Jadi dalam contoh pertama, ng-style dikondisikan oleh tiga pernyataan. Jika semuanya salah, tidak ada gaya yang diterapkan, tetapi mengikuti logika kita, setidaknya satu akan diterapkan, jadi, ekspresi logika akan memeriksa perbandingan variabel mana yang benar dan karena array yang tidak kosong selalu benar, yang akan meninggalkan array sebagai return dan dengan hanya satu true, mengingat kita menggunakan OR untuk seluruh respons, gaya yang tersisa akan diterapkan.
Omong-omong, saya lupa memberi Anda fungsi isActive ():
PEMBARUAN BARU
Di sini Anda memiliki sesuatu yang saya temukan sangat berguna. Ketika Anda perlu menerapkan kelas tergantung pada nilai variabel, misalnya, ikon tergantung pada konten
div
, Anda dapat menggunakan kode berikut (sangat berguna dalamng-repeat
):sumber
Ini berfungsi dengan baik ketika ng-class tidak dapat digunakan (misalnya ketika menata SVG):
(Saya pikir Anda harus menggunakan Angular terbaru yang tidak stabil untuk menggunakan ng-attr-, saya saat ini di 1.1.4)
Saya telah menerbitkan artikel tentang bekerja dengan AngularJS + SVG. Ini berbicara tentang masalah ini dan banyak lainnya. http://www.codeproject.com/Articles/709340/Implementing-a-Flowchart-with-SVG-and-AngularJS
sumber
ng-attr-
pada halaman arahan , bagian ngAttr atribut binding .ng-class
tidak membiarkan Anda melakukan logika, tetaping-attr-class
melakukannya. Mereka berdua memiliki kegunaan mereka, tetapi saya bisa bertaruh banyak pengembang akan mencaring-attr-class
.dan kode
css
sumber
Solusi ini membantu saya
sumber
Anda dapat menggunakan ekspresi ternary. Ada dua cara untuk melakukan ini:
atau...
sumber
Opsi lain ketika Anda membutuhkan gaya css sederhana dari satu atau dua properti:
Melihat:
Pengendali:
sumber
Lihat contoh berikut
sumber
Pada AngularJS v1.2.0rc,
ng-class
dan bahkanng-attr-class
gagal dengan elemen SVG (Mereka memang bekerja sebelumnya, bahkan dengan pengikatan normal di dalam atribut class)Secara khusus, tidak ada yang berfungsi sekarang:
Sebagai solusinya, saya harus menggunakan
dan kemudian gaya menggunakan
sumber
Satu lagi (di masa depan) cara menerapkan gaya secara kondisional adalah dengan menciptakan gaya scoped
Tetapi saat ini hanya FireFox yang mendukung gaya cakupan.
sumber
Ada satu opsi lagi yang baru-baru ini saya temukan bahwa beberapa orang mungkin menemukan berguna karena memungkinkan Anda untuk mengubah aturan CSS dalam elemen gaya - sehingga menghindari kebutuhan untuk penggunaan berulang dari arahan sudut seperti ng-style, ng-class, ng-show, ng-hide, ng-animate, dan lainnya.
Opsi ini memanfaatkan layanan dengan variabel layanan yang ditetapkan oleh pengontrol dan ditonton oleh atribut-directive yang saya sebut "custom-style". Strategi ini dapat digunakan dalam banyak cara yang berbeda, dan saya berusaha memberikan panduan umum dengan biola ini .
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
Satu hal yang perlu diperhatikan adalah - jika gaya CSS memiliki tanda hubung - Anda harus menghapusnya. Jadi jika Anda ingin mengatur
background-color
, cara yang benar adalah:sumber
Inilah cara saya menerapkan gaya teks abu-abu pada tombol yang dinonaktifkan
Berikut ini contoh yang berfungsi:
https://stackblitz.com/edit/example-conditional-disable-button?file=src%2Fapp%2Fapp.component.html
sumber