Угловой материал динамически изменяет основной цвет компонентов

#angular #angular-material

Вопрос:

Мне было интересно, можно ли изменить три цвета (основной, акцент, предупреждение) для каждого компонента по-разному, без импорта определенной темы.

Итак, в основном у меня есть my-theme.scss файл, в котором все определено (цвета/типографии). В styles.scss теме импортируется, а затем устанавливается в index.html или app.component.html :

 @import "themes/my-theme.scss";

.my-light-theme {
  @include mat.all-component-colors($my-light-theme);
  @include mat.all-component-typographies($my-light-theme);
}

.my-dark-theme {
  @include mat.all-component-colors($my-dark-theme);
  @include mat.all-component-typographies($my-dark-theme);
}
 

Проблема сейчас в том, что я определил четыре разных основных цвета для темы и теперь хочу использовать на себе другой основной цвет header.component , чем тот, который используется по умолчанию. Я мог бы добиться этого, импортировав соответствующую тему и установив в header.component.scss :

 @use 'sass:map';
@use '~@angular/material' as mat;
@import "src/themes/my-theme.scss";

$color-config: mat.get-color-config($my-light-theme);

$primary-palette: map.get($color-config, "primary");
$accent-palette: map.get($color-config, "accent");

.toolbar {
  background: mat.get-color-from-palette($primary-palette, "custom-green") !important;
}
 

При таком выполнении возникает проблема, что если я переключусь на другую тему, например, переключусь между светлой и темной темами, то только светлая тема будет иметь назначенный вручную цвет. Есть ли какой-нибудь способ справиться с этим более динамично и не импортировать тему?

Я предполагаю, что это невозможно, потому что, если вы используете самостоятельную палитру custom-green , в других ваших темах может не быть нужного цвета.