Qual è il modo migliore per applicare condizionatamente una classe?
Diciamo che hai un array che è reso in un ul
con un li
per ogni elemento e una proprietà sul controller chiamata selectedIndex
. Quale sarebbe il modo migliore per aggiungere una classe al li
con l'indice selectedIndex
in AngularJS?
Attualmente sto duplicando (a mano) il codice li
e aggiungendo la classe a uno dei tag li
e usando ng-show
e ng-hide
per mostrare solo un li
per indice.
1170
3
Se non volete mettere i nomi delle classi CSS in Controller come faccio io, ecco un vecchio trucco che uso fin dai giorni pre-v1. Possiamo scrivere un'espressione che valuta direttamente un nome di classe selezionato, non sono necessarie direttive personalizzate:
*Si prega di notare la vecchia sintassi con i due punti.
C'è anche un nuovo modo migliore di applicare le classi in modo condizionale, come:
Angular ora supporta le espressioni che restituiscono un oggetto. Ogni proprietà (nome) di questo oggetto è ora considerata come un nome di classe e viene applicata a seconda del suo valore.
Tuttavia questi modi non sono funzionalmente uguali. Ecco un esempio:
Potremmo quindi riutilizzare le classi CSS esistenti fondamentalmente mappando una proprietà del modello in un nome di classe e allo stesso tempo mantenere le classi CSS fuori dal codice del Controller.
Ecco una soluzione molto più semplice:
Ho affrontato un problema simile di recente e ho deciso di creare semplicemente un filtro condizionale:
Prende un singolo argomento, che è o un array di 2 elementi o una stringa, che viene trasformata in un array a cui viene aggiunta una stringa vuota come secondo elemento: