Как применить условный CSS к полю ввода дочернего компонента в Angular 5?

Я столкнулся с проблемами, пытаясь динамически изменить цвет фона поля автозаполнения дочернего компонента на основе логического условия.

В моем родительском компоненте у меня есть компонент поиска, который содержит поле автозаполнения Angular Material:

<search (notify) = "onSearch($event, i)" searchType = "Product" 
    [(value)] = "repair.product" 
    [ngClass] = "{'error-color': repair.invalidProduct}"></search>

И в scss моего родительского компонента у меня есть этот класс:

:host ::ng-deep search.input .error-color {
  background-color: rgba(255, 255, 0, 0.48);
}

Есть ли способ сделать это?

что это за <search></search> твой компонент?

Stavm 04.05.2018 22:05

Правильно, это мой пользовательский компонент

MeesterMarcus 04.05.2018 22:05

так почему бы не использовать привязку свойств и не передать логическое значение, которое будет использоваться ВНУТРИ компонента?

Stavm 04.05.2018 22:06
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
3
1 913
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вы можете передать логическое значение от родительского компонента дочернему компоненту с помощью привязки свойств - @input () и использовать его внутри дочернего компонента.

так что у вашего родителя:

<search [isInvalid] = "repair.invalidProduct"></search>

и внутри дочернего компонента (поиск):

search.component.TS:

@Input() isInvalid = false;

search.component.HTML:

<input [ngClass] = "{'error-color': isInvalid}" />

search.component.CSS:

.error-color { background-color: red }
Ответ принят как подходящий

Попытайся:

search.error-color ::ng-deep  input {
  background-color: rgba(255, 255, 0, 0.48);
}

Или нет стилей инкапсуляции в компоненте

@Component({
// ...
encapsulation: ViewEncapsulation.None,
styles: [
  // ...
]
})

Спасибо, это оказалось тем решением, которое я искал.

MeesterMarcus 04.05.2018 23:34

Другие вопросы по теме