Я сделал что-то подобное (но пока только с файлом темы).
Вам не нужно изменять какой-либо файл стиля, и вы можете расширить его для большего количества файлов темы (возможно, измените их с помощьюраскрывающийся список в вашем макете).
Прежде всего, у меня есть сервис, подобный этому:
const defaultTheme = require('../styles/themes/theme-default.scss');
@Injectable({
providedIn: SharedModule
})
export class ThemeService {
styleTag: any;
constructor() {
this._createStyle();
}
applyDefaultTheme(){
this.injectStylesheet(defaultTheme);
}
private _createStyle() {
const head = document.head || document.getElementsByTagName('head')[0];
this.styleTag = document.createElement('style');
this.styleTag.type = 'text/css';
this.styleTag.id = 'appthemes';
head.appendChild(this.styleTag);
}
injectStylesheet(css) {
this.styleTag.innerHTML = css;
}
}
Затем у меня есть компонент макета, и в его конструкторе я вызываю ThemeService следующим образом:
this.themeService.applyDefaultTheme();
Этот файл темы будет применяться при создании компонента Layout.ThemeService может быть изменен для поддержки большего количества тем.
Файл theme_default.scss выглядит примерно так:
////////////////
// SIDEBAR
$sidebar-bg : $aside-bg;
$sidebar-item-color : #FFFFFF;
body,
.wrapper .section-container {
background-color: $content-bg;
}
////////////////
, и я использую эти переменные в других файлах стилей,При этом изменение файла темы изменит цвета во всем приложении.
Надеюсь, это поможет. В следующий раз постарайтесь приложить немного больше усилий к вашему вопросу, так как его легче понять, если он хорошо задан, и вы предоставляете то, что уже пробовали.