【发布时间】:2020-03-03 09:55:02
【问题描述】:
我试图让我的应用程序的背景是由当前使用的主题定义的颜色。这实际上不起作用。
我尝试过的:Angular Material2 theming - how to set app background?。我尝试使用此帖子的公认解决方案,但对我而言,仅设置了所有组件的背景并被主题覆盖。我不知道如何处理它。
我已经复制了本教程中的主题操作,并且一切正常:https://medium.com/grensesnittet/dynamic-themes-in-angular-material-b6dc0c88dfd7
app.component.html:
<div
[ngClass]="{'default-theme': (selectedTheme | async) === 'default-theme', 'dark-theme': (selectedTheme | async) === 'dark-theme', 'light-theme': (selectedTheme | async) === 'light-theme', 'nature-theme': (selectedTheme | async) === 'nature-theme'}">
<div class="mat-app-background">
<app-header></app-header>
<router-outlet></router-outlet>
</div>
</div>
index.html:
<body class="mat-app-background">
<app-root>
</app-root>
</body>
材料主题.scss:
@import "~@angular/material/theming";
@import "./component-themes";
@include mat-core();
$primary: mat-palette($mat-indigo);
$accent: mat-palette($mat-pink, A200, A100, A400);
$warn: mat-palette($mat-red);
$theme: mat-light-theme($primary, $accent, $warn);
@include angular-material-theme($theme);
@include component-themes($theme);
.dark-theme {
color: $light-primary-text;
$dark-primary: mat-palette($mat-grey, 700, 300, 900);
$dark-accent: mat-palette($mat-blue-grey, 400);
$dark-warn: mat-palette($mat-red, 500);
$dark-theme: mat-dark-theme($dark-primary, $dark-accent, $dark-warn);
$bp: mat-palette($mat-red);
@include angular-material-theme($dark-theme);
@include component-themes($dark-theme);
}
styles.scss:
@import "./material-theme";
@import "~@angular/material/theming";
body {
margin: 0;
font-family: Roboto, sans-serif;
// background-color: mat-color($bp);
}
主题通过 app-component.ts 设置:
ngOnInit(): void {
this.themeService.setTheme(localStorage.getItem("theme"));
this.selectedTheme = this.themeService.theme;
this.selectedTheme.subscribe(data => {
const overlayContainerClasses = this.overlayContainer.getContainerElement()
.classList;
const themeClassesToRemove = Array.from(
overlayContainerClasses
).filter((item: string) => item.includes("-theme"));
if (themeClassesToRemove.length) {
overlayContainerClasses.remove(...themeClassesToRemove);
}
overlayContainerClasses.add(data);
});
}
那么完成它的最佳方法是什么?
【问题讨论】: