Пользовательские классы CSS на шаблонах компонентов Angular 2 в зависимости от местоположения - PullRequest
0 голосов
/ 20 декабря 2018

Наша команда переводит нашу кодовую базу на Angular 2, и, отвечая за разработку / организацию CSS, я рассмотрел варианты добавления стилей в Angular 2, а также то, как Angular 2 может изменить способ создания нашего пользовательского интерфейса.Многие из наших элементов пользовательского интерфейса будут компонентами.Одна вещь, которую я хотел бы сделать, это добавить собственный класс CSS к родительскому элементу в шаблоне компонента в зависимости от того, где он появляется.Вот пример элемента пользовательского интерфейса:

<button class="basic-button">
    Some action text
</button>

Это будет жить в файле с именем basic-button.component.html.Его компонентный селектор basic-button.Допустим, кнопка появляется на странице настроек учетной записи клиента, а дизайн требует значения цвета текста, отличного от нашего по умолчанию.Мы хотели бы добавить CSS-класс модификатора к элементу button:

<button class="basic-button--alert basic-button">
    Some action text
</button>

Но если эта же кнопка также появляется на странице продукта и требует еще одного значения цвета, нам нужно применить другой класс-модификатор:

<button class="basic-button--warning basic-button">
    Some action text
</button>

Есть ли способ присоединить пользовательский класс к элементу кнопки в зависимости от того, где он появляется?Важно применить класс к фактическому элементу HTML, поскольку применение его к селектору компонентов может не повлиять должным образом на стиль, как в этом случае цвет текста кнопки.По определенным причинам мы не планируем ограничивать наш CSS, поэтому теоретически мы можем использовать вложение для достижения наших целей:

.account-settings .basic-button {
    color: red;
}

.product-details .basic-button {
    color: orange;
}

Но мы предпочитаем минимизировать вложение как можно больше.

1 Ответ

0 голосов
/ 20 декабря 2018

Идея использования активированного маршрута хороша.Я бы создал пользовательский компонент кнопки с кнопкой, к которой вы можете наследовать свойства, которые вы хотите применить, и используйте HostBinding , чтобы применить класс к пользовательскому компоненту на основе активированного маршрута.

Или (для меня это немного странно) вы можете создать директиву, которую можно применить к компоненту нативной кнопки, а затем использовать Angular Renderer , чтобы применить класс к кнопке на основеактивированный маршрут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...