Когда вам нужно применить динамические стили к элементу HTML с помощью Angular, есть разные варианты, которые следует учитывать.
Первое и наиболее очевидное решение - использовать обычные атрибуты HTML style
или class
вместе с привязками данных Angular, что выглядит следующим образом:
<div [style.color]="errorMessageColor"> The phone number you entered does not match the expected format </div>
Приведенный выше код будет стилизовать div
с использованием значения цвета, установленного в свойстве errorMessageColor
вашего компонента. Благодаря привязке данных всякий раз, когда это свойство изменяется, div
будет получать новый цвет.
Вы можете сделать приведенный выше пример еще более мощным, используя тернарный оператор в своем выражении для выражения условного стиля:
<div [style.color]="hasError ? 'red' : 'black' "> The phone number you entered does not match the expected format </div>
В приведенном выше примере предполагается, что hasError
может оцениваться как true
, что удобно, поскольку в Javascript все, что не является null
или undefined
, будет работать. В результате, если hasError
не является null
, undefined
или false
, сообщение будет отображаться красным цветом, в противном случае оно будет черным.
Это здорово, но может стать довольно подробным, если вы хотите применить несколько стилей к одному и тому же элементу:
<div [style.color]="hasError ? 'red' : 'black' " [style.font]="font" [style.background-color]="hasError ? 'tomato' : 'white' "> The phone number you entered does not match the expected format </div>
В этом случае использование класса CSS - гораздо лучший вариант, поскольку вы можете реорганизовать эти свойства CSS в одном месте и, возможно, повторно использовать их в других элементах HTML.
Однако иногда вам могут понадобиться очень специфические свойства CSS, основанные на разных условиях. Вот где в игру вступает ngStyle
. С ngStyle
вы можете выполнить привязку к объекту, который выражает столько условий и случаев, сколько вам нужно:
<div [ngStyle]="currentStyles"> The phone number you entered does not match the expected format </div>
А затем в коде вашего компонента:
this.currentStyles = { 'font-style': this.canSave ? 'italic' : 'normal', 'color': this.hasError ? 'red' : 'black', 'font-size': this.hasError ? '24px' : '12px' };
Теперь вы можете выразить столько разных стилей, сколько нужно. ngStyle
- это директива Angular, которая дает вам гибкость для этого, тогда как style
- это обычное свойство HTML, к которому вы можете связывать значения только одно за другим. В этом разница между ними двумя.
Обратите внимание, что такое же различие в поведении применяется между class
и ngClass
, где первое предназначено для использования для одиночных привязок, а второе может использоваться для привязки к объекту решения, аналогичному показанному выше для ngStyle
.
Меня зовут Ален Шотар. Я являюсь консультантом-основателем и тренером в Angular Training, где я помогаю командам веб-разработчиков изучать и свободно владеть Angular. Посетите нас @AngularTraining!
Если вам понравилась эта статья, порекомендуйте и поделитесь ею! Спасибо за ваше время.