Сценарий:
- У меня есть приложение, в котором я хотел бы использовать 3 разные графические темы.
- Для распространения своих тем я использую3 различных класса, которые я применяю к своему корневому компоненту,
позвольте назвать эти классы .themeA, .themeB, .themeC.
Для каждой темы,
У меня есть переменная Sass, которая инкапсулирует все нужные мне цвета.
Например:
$themeAColors: (
my-background-color: 'blue';
my-color: 'green';
);
$themeBColors: (
my-background-color: 'red';
my-color: 'yellow';
);
$themeCColors: (
my-background-color: 'white';
my-color: 'black';
)
Затем в каждом подкомпоненте, в котором я хочу применить свою тему, я использую следующий шаблон:
@mixin subComponentStyle($theme) {
.title {
background-color: map-get($theme, my-background-color);
color: map-get($theme, my-color);
}
}
:host-context(.themeA) {
@include subComponentStyle($themeAColors);
}
:host-context(.themeB) {
@include subComponentStyle($themeBColors);
}
:host-context(.themeC) {
@include subComponentStyle($themeCColors);
}
Проблема:
- Есть ли способ избежать или факторизовать использование : host-context () селектор в каждом субкомпоненте И с учетом инкапсуляции стиля компонента?
Обновление: Спасибо, это помогает немного упростить вещи.Теперь мы хотели бы найти способ избежать копирования этого блока во всех подкомпонентах:
@each $param in ($themeAColors, $themeBColors, $themeCColors) {
$name: map-get($param, name);
:host-context(#{ $name }) {
@include subComponentStyle($param);
}
}
В идеале, мы хотели бы заменить это вызовом функции, который будет принимать любой миксин в параметре и применять его,Таким образом, в каждом компоненте нам просто нужно вызывать эту функцию с правильным mixin для обработки тем.