Q1. Предположим, я хочу изменить внешний вид каждого «элемента», который пользователь помечает для удаления до нажатия основной кнопки «Удалить». (Эта немедленная визуальная обратная связь должна устранить необходимость в общеизвестном диалоговом окне «Вы уверены?».) Пользователь установит флажки, чтобы указать, какие элементы следует удалить. Если флажок снят, этот элемент должен вернуться к своему обычному виду.
Каков наилучший способ применить или удалить стиль CSS?
Q2. Предположим, я хочу позволить каждому пользователю персонализировать представление моего сайта. Например, выберите из фиксированного набора размеров шрифта, разрешите определяемые пользователем цвета переднего плана и фона и т. Д.
Какой лучший способ применить стиль CSS, который пользователь выбирает / вводит?
Ответы:
Angular предоставляет ряд встроенных директив для условного / динамического управления стилями CSS:
Обычный «угловой путь» включает в себя привязку свойства модели / области к элементу пользовательского интерфейса, который будет принимать пользовательский ввод / манипулирование (т. Е. Использование ng-модели), а затем связывание этого свойства модели с одной из упомянутых выше встроенных директив.
Когда пользователь изменяет пользовательский интерфейс, Angular автоматически обновляет связанные элементы на странице.
Q1 звучит как хороший пример для ng-класса - стиль CSS может быть записан в классе.
ng-class принимает "выражение", которое должно соответствовать одному из следующих:
Предполагая, что ваши элементы отображаются с использованием ng-repeat на некоторой модели массива, и что когда флажок для элемента установлен, вы хотите применить
pending-delete
класс:Выше мы использовали тип выражения ng-класса # 3 - карту / объект с именами классов для логических значений.
Q2 звучит как хороший пример для стиля ng - стиль CSS динамический, поэтому мы не можем определить класс для этого.
ng-style принимает "выражение", которое должно вычисляться так:
Для надуманного примера, предположим, что пользователь может ввести имя цвета в текстовое поле для цвета фона (выбор цвета jQuery был бы намного лучше):
Скрипка для обоих вышеперечисленных.
Скрипка также содержит пример ng-show и ng-hide . Если флажок установлен, в дополнение к цвету фона, который становится розовым, отображается некоторый текст. Если в текстовое поле введен «красный», div становится скрытым.
источник
Я обнаружил проблемы при применении классов внутри элементов таблицы, когда один класс уже был применен ко всей таблице (например, цвет, примененный к нечетным строкам
<myClass tbody tr:nth-child(even) td>
). Кажется , что , когда вы проверяете элемент с Инструментами разработчика , тоelement.style
не имеет никакого стиля назначенный. Поэтому вместо использованияng-class
я попытался использоватьng-style
, и в этом случае новый атрибут CSS появляется внутриelement.style
. Этот код прекрасно работает для меня:Myvar - это то, что я оцениваю, и в каждом случае я применяю стиль к каждому в
<td>
зависимости от myvar значения , который переписывает текущий стиль, применяемый классом CSS для всей таблицы.ОБНОВИТЬ
Если вы хотите применить класс к таблице, например, при посещении страницы или в других случаях, вы можете использовать эту структуру:
По сути, нам нужно активировать ng-класс - это класс для применения и операторы true или false. True применяет класс, а false - нет. Итак, здесь у нас есть две проверки маршрута страницы и ИЛИ между ними, поэтому, если мы находимся в
/route_a
ИЛИ, мы находимсяroute_b
, активный класс будет применен.Это работает просто имея логическую функцию справа, которая возвращает истину или ложь.
Итак, в первом примере стиль ng обусловлен тремя утверждениями. Если все они ложны, стиль не применяется, но, следуя нашей логике, будет применен, по крайней мере, один, поэтому логическое выражение проверит, какое сравнение переменных является истинным, и поскольку непустой массив всегда истинен, это будет оставил массив в качестве возврата и только с одним значением true, учитывая, что мы используем OR для всего ответа, оставшийся стиль будет применен.
Кстати, я забыл дать вам функцию isActive ():
НОВОЕ ОБНОВЛЕНИЕ
Вот вам кое-что, что я считаю действительно полезным. Когда вам нужно применить класс в зависимости от значения переменной, например, значок в зависимости от содержимого
div
, вы можете использовать следующий код (очень полезно вng-repeat
):источник
Это хорошо работает, когда нельзя использовать ng-класс (например, при стилизации SVG):
(Я думаю, что вы должны быть на последнем нестабильном Angular, чтобы использовать ng-attr-, я сейчас на 1.1.4)
Я опубликовал статью о работе с AngularJS + SVG. Он говорит об этой проблеме и многих других. http://www.codeproject.com/Articles/709340/Implementing-a-Flowchart-with-SVG-and-AngularJS
источник
ng-attr-
на странице директив раздел привязок атрибутов ngAttr .ng-class
не позволяет вам выполнять логику, ноng-attr-class
делает. Они оба имеют свое применение, но я могу поспорить, что многие разработчики будут искатьng-attr-class
.и код
CSS
источник
Это решение помогло мне
источник
Вы можете использовать троичное выражение. Есть два способа сделать это:
или...
источник
Другой вариант, когда вам нужен простой стиль CSS одного или двух свойств:
Посмотреть:
контроллер:
источник
Смотрите следующий пример
источник
Начиная с AngularJS v1.2.0rc
ng-class
и дажеng-attr-class
не работает с элементами SVG (раньше они работали, даже с нормальной привязкой внутри атрибута класса)В частности, ни один из них не работает сейчас:
В качестве обходного пути, я должен использовать
а затем стиль с помощью
источник
Еще один (в будущем) способ условного применения стиля - создание условного стиля
Но в настоящее время только FireFox поддерживает стили с заданной областью.
источник
Недавно я обнаружил еще одну опцию, которая может оказаться полезной для некоторых людей, поскольку она позволяет изменять правило CSS внутри элемента стиля, что позволяет избежать повторного использования угловой директивы, такой как ng-style, ng-class, нг-шоу, нг-скрыть, нг-анимация и другие.
Эта опция использует сервис с сервисными переменными, которые устанавливаются контроллером и отслеживаются директивой атрибута, которую я называю "custom-style". Эту стратегию можно использовать по-разному, и я попытался дать общее руководство по этой скрипке .
источник
ну, я бы посоветовал вам проверить состояние вашего контроллера с помощью функции, возвращающей true или false .
и в вашем контроллере проверьте состояние
источник
Следует обратить внимание на то, что - если у стиля CSS есть тире - вы должны удалить их. Так что если вы хотите установить
background-color
, правильный путь:источник
Вот как я условно применил серый текстовый стиль к отключенной кнопке
Вот рабочий пример:
https://stackblitz.com/edit/example-conditional-disable-button?file=src%2Fapp%2Fapp.component.html
источник