Pytanie 1 Załóżmy, że chcę zmienić wygląd każdego „elementu” zaznaczonego przez użytkownika do usunięcia przed naciśnięciem głównego przycisku „usuń”. (Ta natychmiastowa wizualna informacja zwrotna powinna wyeliminować potrzebę przysłowiowego okna dialogowego „jesteś pewien?”). Użytkownik zaznaczy pola wyboru, aby wskazać, które elementy należy usunąć. Jeśli pole wyboru nie jest zaznaczone, element powinien wrócić do normalnego wyglądu.
Jaki jest najlepszy sposób na zastosowanie lub usunięcie stylizacji CSS?
Q2 Załóżmy, że chcę pozwolić każdemu użytkownikowi na personalizację sposobu prezentacji mojej witryny. Np. Wybierz z ustalonego zestawu rozmiarów czcionek, zezwól na zdefiniowane przez użytkownika kolory pierwszego planu i tła itp.
Jaki jest najlepszy sposób zastosowania stylu CSS, który wybiera / wprowadza użytkownik?
Odpowiedzi:
Angular zapewnia szereg wbudowanych dyrektyw do warunkowego / dynamicznego manipulowania stylem CSS:
Normalny „sposób kątowy” obejmuje powiązanie właściwości model / scope z elementem interfejsu użytkownika, który zaakceptuje dane wejściowe / manipulację użytkownika (tj. Użycie ng-model), a następnie powiązanie tej właściwości modelu z jedną z wbudowanych dyrektyw wspomnianych powyżej.
Gdy użytkownik zmieni interfejs użytkownika, Angular automatycznie zaktualizuje powiązane elementy na stronie.
Q1 brzmi jak dobry przypadek dla klasy ng - styl CSS można uchwycić w klasie.
ng-class akceptuje „wyrażenie”, które musi zostać ocenione według jednego z poniższych:
Zakładając, że twoje elementy są wyświetlane za pomocą ng-repeat na jakimś modelu macierzowym, a gdy pole wyboru dla elementu jest zaznaczone, chcesz zastosować
pending-delete
klasę:Powyżej użyliśmy typu wyrażenia ng-class # 3 - mapę / obiekt nazw klas do wartości boolowskich.
Q2 brzmi jak dobry argument na styl ng - styl CSS jest dynamiczny, więc nie możemy zdefiniować dla tego klasy.
ng-style akceptuje „wyrażenie”, które należy ocenić, aby:
Dla wymyślonego przykładu załóżmy, że użytkownik może wpisać nazwę koloru w polu tekstowym dla koloru tła (próbnik kolorów jQuery byłby znacznie ładniejszy):
Skrzypki dla obu powyższych.
Skrzypce zawiera również przykład ng-show i ng-hide . Jeśli pole wyboru jest zaznaczone, oprócz koloru tła zmieniającego kolor na różowy, pojawia się tekst. Jeśli w polu tekstowym pojawi się „czerwony”, div zostanie ukryty.
źródło
Znalazłem problemy przy stosowaniu klas w elementach tabeli , gdy miałem już jedną klasę zastosowaną do całej tabeli (na przykład kolor zastosowany do nieparzystych wierszy
<myClass tbody tr:nth-child(even) td>
). Wydaje się, że podczas inspekcji elementu z Narzędzi Projektowych ,element.style
ma styl przypisany. Więc zamiast używaćng-class
, próbowałem użyćng-style
, aw tym przypadku nowy atrybut CSS pojawia się w środkuelement.style
. Ten kod działa dla mnie świetnie:Myvar jest tym, co oceniam , iw każdym przypadku stosuję styl do każdego w
<td>
zależności od wartości myvar , który zastępuje obecny styl zastosowany przez klasę CSS dla całej tabeli.AKTUALIZACJA
Jeśli chcesz zastosować klasę do tabeli, na przykład podczas odwiedzania strony lub w innych przypadkach, możesz użyć tej struktury:
Zasadniczo, aby aktywować klasę ng , musimy zastosować klasę oraz prawdziwe lub fałszywe oświadczenie. Prawda stosuje się do klasy, a fałsz nie. Mamy więc dwa sprawdzanie trasy strony i OR między nimi, więc jeśli jesteśmy w
/route_a
OR, jesteśmy wroute_b
, zastosowana zostanie klasa aktywna .Działa to po prostu z funkcją logiczną po prawej stronie, która zwraca true lub false.
W pierwszym przykładzie styl ng jest uwarunkowany trzema instrukcjami. Jeśli wszystkie są fałszywe, nie zostanie zastosowany żaden styl, ale zgodnie z naszą logiką zostanie zastosowany co najmniej jeden, więc wyrażenie logiczne sprawdzi, które porównanie zmiennych jest prawdziwe, a ponieważ niepusta tablica jest zawsze prawdziwa, to pozostawił tablicę jako return i tylko jedna prawda, biorąc pod uwagę, że używamy OR dla całej odpowiedzi, pozostały styl zostanie zastosowany.
Nawiasem mówiąc, zapomniałem podać ci funkcję isActive ():
NOWA AKTUALIZACJA
Tutaj masz coś, co uważam za bardzo przydatne. Gdy musisz zastosować klasę w zależności od wartości zmiennej, na przykład ikonę w zależności od zawartości
div
, możesz użyć następującego kodu (bardzo przydatnego wng-repeat
):źródło
Działa to 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)
Opublikowałem artykuł o pracy z AngularJS + SVG. Mówi o tym problemie i wielu innych. http://www.codeproject.com/Articles/709340/Implementing-a-Flowchart-with-SVG-and-AngularJS
źródło
ng-attr-
na stronie dyrektyw , sekcja powiązania atrybutów ngAttr .ng-class
nie pozwala ci wykonywać logiki, aleng-attr-class
robi. Oba mają swoje zastosowania, ale mogę się założyć, że wielu programistów będzie szukałong-attr-class
.i kod
css
źródło
To rozwiązanie załatwiło sprawę
źródło
Możesz użyć wyrażenia trójskładnikowego. Można to zrobić na dwa sposoby:
lub...
źródło
Inna opcja, gdy potrzebujesz prostego stylu css o jednej lub dwóch właściwościach:
Widok:
Kontroler:
źródło
Zobacz następujący przykład
źródło
Od AngularJS v1.2.0rc,
ng-class
a nawetng-attr-class
nie działa z elementami SVG (działały wcześniej, nawet przy normalnym wiązaniu wewnątrz atrybutu klasy)W szczególności żaden z tych obecnie nie działa:
Aby obejść ten problem, muszę go użyć
a następnie styl za pomocą
źródło
Kolejnym (w przyszłości) sposobem warunkowego zastosowania stylu jest warunkowe tworzenie stylu o zasięgu
Ale obecnie tylko FireFox obsługuje style o zasięgu.
źródło
Jest jeszcze jedna opcja, którą niedawno odkryłem, że niektórzy ludzie mogą uznać ją za przydatną, ponieważ pozwala ona zmienić regułę CSS w elemencie stylu - unikając w ten sposób potrzeby wielokrotnego stosowania dyrektywy kątowej, takiej jak ng-style, ng-class, ng-show, ng-hide, ng-animate i inne.
Ta opcja korzysta z usługi ze zmiennymi usługowymi, które są ustawiane przez kontroler i obserwowane przez dyrektywę atrybutów, którą nazywam „stylem niestandardowym”. Tę strategię można wykorzystać na wiele różnych sposobów i starałem się udzielić ogólnych wskazówek dotyczących tego skrzypka .
źródło
cóż, sugeruję sprawdzenie stanu w kontrolerze za pomocą funkcji zwracającej wartość true lub false .
i sprawdź w swoim kontrolerze
źródło
Jedną rzeczą do obejrzenia jest - jeśli styl CSS ma myślniki - musisz je usunąć. Więc jeśli chcesz ustawić
background-color
, poprawny sposób to:źródło
Oto jak warunkowo zastosowałem szary styl tekstu na wyłączonym przycisku
Oto działający przykład:
https://stackblitz.com/edit/example-conditional-disable-button?file=src%2Fapp%2Fapp.component.html
źródło