Załóżmy, że masz tablicę renderowaną ul
za pomocą li
dla każdego elementu i wywoływaną właściwość kontrolera selectedIndex
. Jaki byłby najlepszy sposób dodania klasy li
z indeksem selectedIndex
w AngularJS?
Obecnie duplikuję (ręcznie) li
kod i dodaję klasę do jednego ze li
znaczników oraz używam ng-show
i ng-hide
pokazuję tylko jeden li
na indeks.
Odpowiedzi:
Jeśli nie chcesz wstawiać nazw klas CSS do kontrolera tak jak ja, oto stara sztuczka, której używam od dni wcześniejszych niż v1. Możemy napisać wyrażenie, które ocenia bezpośrednio do wybranej nazwy klasy , nie są wymagane żadne niestandardowe dyrektywy:
Zwróć uwagę na starą składnię z dwukropkiem.
Istnieje również nowy lepszy sposób warunkowego stosowania klas, na przykład:
Angular obsługuje teraz wyrażenia zwracające obiekt. Każda właściwość (nazwa) tego obiektu jest teraz uważana za nazwę klasy i jest stosowana w zależności od jej wartości.
Jednak te sposoby nie są funkcjonalnie równe. Oto przykład:
W związku z tym moglibyśmy ponownie wykorzystać istniejące klasy CSS, zasadniczo odwzorowując właściwość modelu na nazwę klasy i jednocześnie utrzymując klasy CSS poza kodem kontrolera.
źródło
($index==selectedIndex) ? 'selected' : ''
?{classname: '$index === selectedIndex'}
i to nie działało. Kiedy położyłem wszystko razem i użyłem == zamiast === zadziałało.{classname: '$index==selectedIndex'}
Klasa ng obsługuje wyrażenie, które musi być ocenione jako jedno z nich
Korzystając z formularza 3), możemy po prostu pisać
Zobacz także Jak warunkowo zastosować style CSS w AngularJS? dla szerszej odpowiedzi.
Aktualizacja : Angular 1.1.5 dodał obsługę trójskładnikowego operatora , więc jeśli ta konstrukcja jest ci bardziej znana:
źródło
ng-class="{'selected': $index==selectedIndex}"
działa dla mnieMoją ulubioną metodą jest użycie wyrażenia trójskładnikowego.
Uwaga: jeśli używasz starszej wersji Angulara, powinieneś użyć jej zamiast tego,
źródło
ng-class="property.name=='timestamp' ? 'property-timestamp' : 'property-'+{{$index}}"
. Nie udało mi się wymyślić żadnego innego sposobu.Dodam do tego, ponieważ niektóre z tych odpowiedzi wydają się nieaktualne. Oto jak to robię:
Gdzie „isSelected” to zmienna javascript zdefiniowana w obrębie kontrolera kątowego o zasięgu.
Aby dokładniej odpowiedzieć na twoje pytanie, oto jak możesz wygenerować listę z tym:
HTML
JS
Zobacz: http://jsfiddle.net/tTfWM/
Zobacz: http://docs.angularjs.org/api/ng.directive:ngClass
źródło
ng-class:className
vs po prostuclass="{{className}}"
?Oto o wiele prostsze rozwiązanie:
źródło
Ostatnio napotkałem podobny problem i postanowiłem po prostu utworzyć filtr warunkowy:
Pobiera pojedynczy argument, którym jest albo 2-elementowa tablica, albo ciąg, który zamienia się w tablicę, do której dołączany jest pusty ciąg jako drugi element:
źródło
filter('yesNo', function() { return function(input) { // info('yesNo('+ input +')'); switch(input){ case '1': return ' yes '; break; default: return ' no '; break; } } });
Jeśli chcesz wyjść poza ocenę binarną i trzymać CSS z dala od kontrolera, możesz zaimplementować prosty filtr, który ocenia dane wejściowe względem obiektu mapy:
Pozwala to napisać znaczniki w następujący sposób:
źródło
Ostatnio robiłem to tak:
The
isShowing
Wartość jest to wartość, która znajduje się na moim kontroler, który pobiera z przełączanych za pomocą kliknięcia jednego przycisku i części pomiędzy pojedynczym nawiasie są klasy I utworzone w moim pliku css.EDYCJA: Chciałbym również dodać, że codechool.com ma bezpłatny kurs sponsorowany przez Google na AngularJS, który omawia wszystkie te rzeczy, a potem niektóre. Za nic nie trzeba płacić, wystarczy założyć konto i zacząć! Powodzenia wszystkim!
źródło
isShowing
zatem tablica w kontrolerze?Operator trójskładnikowy został właśnie dodany do parsera kątowego w 1.1.5 .
Najprostszym sposobem na zrobienie tego jest teraz:
źródło
class="otherClass ng-class:($index==selectedIndex)? 'selected' : '';"
.Możemy stworzyć funkcję zarządzania klasą zwrotu z warunkiem
I wtedy
Możesz odwołać się do pełnej strony kodowej na ng-class, jeśli przykład
źródło
Jestem nowy w Angular, ale znalazłem to, aby rozwiązać mój problem:
To warunkowo zastosuje klasę opartą na var. Zaczyna się od domyślnego pobrania ikony , używając klasy ng, sprawdzam status
showDetails
iftrue/false
i stosuję przesyłanie ikon klasy . Działa świetnie.Mam nadzieję, że to pomoże.
źródło
To działa jak urok;)
źródło
Prawdopodobnie przejdzie to do zapomnienia, ale oto jak wykorzystałem trójskładnikowe operatory 1.1.5 do przełączania klas w zależności od tego, czy wiersz w tabeli jest pierwszym, środkowym czy ostatnim - z wyjątkiem tego, że w tabeli jest tylko jeden wiersz:
źródło
To jest w mojej pracy wielu warunkowo ocenić:
źródło
Oto kolejna opcja, która działa dobrze, gdy nie można użyć klasy ng (na przykład podczas stylowania SVG):
(Myślę, że musisz używać najnowszego niestabilnego Angulara, aby używać ng-attr-, aktualnie jestem na wersji 1.1.4)
źródło
cóż, sugerowałbym sprawdzenie stanu w kontrolerze za pomocą funkcji zwracającej wartość prawda lub fałsz .
i sprawdź w swoim kontrolerze
źródło
częściowy
kontroler
źródło
Jeśli używasz kątowego wcześniejszej niż 1.1.5 (tzn. Nie ma operatora trójskładnikowego) i nadal potrzebujesz równoważnego sposobu ustawienia wartości w obu warunkach, możesz zrobić coś takiego:
źródło
Jeśli masz wspólną klasę stosowaną do wielu elementów, możesz utworzyć niestandardową dyrektywę, która doda tę klasę, np. Ng-show / ng-hide.
Ta dyrektywa doda klasę „aktywną” do przycisku, jeśli zostanie kliknięty
Więcej informacji
źródło
Właśnie dodałem coś, co zadziałało dla mnie dzisiaj, po wielu poszukiwaniach
Mam nadzieję, że pomoże to w pomyślnym rozwoju.
=)
Nieudokumentowana składnia wyrażeń: świetny link do strony ... =)
źródło
Sprawdź to .
Niesławne
if|else
oświadczenie AngularJS !!!Kiedy zacząłem używać Angularjs, byłem trochę zaskoczony, że nie mogłem znaleźć instrukcji if / else.
Pracowałem więc nad projektem i zauważyłem, że podczas używania instrukcji if / else warunek pojawia się podczas ładowania. Aby to naprawić, możesz użyć ng-cloak.
.ng-cloak { display: none }
Dzięki, amadou
źródło
Możesz użyć tego pakietu npm. Obsługuje wszystko i ma opcje dla klas statycznych i warunkowych opartych na zmiennej lub funkcji.
źródło