Я создал новый файл theme.service.ts. в этом файле я определяю ключи моей темы, а также удерживаю свои функции для выключения темы. здесь вы также должны добавить больше тем и их функций переключения
export const redTheme= {
primary: '#f00',
primaryDark: '#aa0000',
secondary: '#fff',
background: '#000'
};
@Injectable({
providedIn: 'root'
})
export class ThemeService {
toggleRed() {
this.setTheme(redTheme);
}
setTheme(theme: {}) {
Object.keys(theme).forEach(k =>
document.documentElement.style.setProperty(`--${k}`, theme[k])
);
}
}
теперь в ваших основных стилях. s css вы добавляете ключи, которые будут отключены в верхней части вашего файла. убедитесь, что у вас одинаковые имена клавиш.
// styles.scss
@import './app/utils/material/material-custom-theme';
@import '~@angular/material/theming';
@include angular-material-typography($custom-typography);
:root {
// default theme
--primary: #00f;
--primaryDark: #0000bb;
--secondary: #0f0;
--background: #000;
}
после этого вы можете импортировать theme.service в свой компонент, где вы переключаете тему (я делаю это в моем sidenavcomponent при нажатии кнопки). Чтобы использовать цвета этой темы в ваших пользовательских компонентах, вам необходимо использовать имена переменных ключей для цвета, который вы хотите использовать. например, вот так
// example.component.scss
.example-custom-class {
background: var(--primary);
color: var(--secondary);
box-shadow: 10px var(--primaryDark);
}
вот как я обработал переключение тем в своем приложении. он немного обходит тематику материала, но с его помощью вы можете установить цвета темы для своих пользовательских компонентов. надеюсь, что смог помочь! :)