I'm trying to achieve that the background of my app is a color defined by the currently used theme. This does not really work.
What I've tried: Angular Material2 theming - how to set app background?. I've tried to use the accepted solution of this posting but for me only the background of all components is set and gets overwritten by the theme. I don't know how to handle it.
How it looks like (white part with no content should be dark as well):

I've copied the theming action like in this tutorial and everything works fine there: 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>
material-theme.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);
}
Themes are set through the 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);
});
}
So what is the best approach to get it done?