Здесь есть несколько вещей.
Во-первых, если вы хотите сохранить переменную доступной в глобальном масштабе, вам следует использовать службу с обеспеченнымIn: 'root':
@Injectable({
providedIn: 'root'
})
export class DarkModeService {
private darkmode = false;
toggle() {
this.darkmode = !this.darkmode;
}
get() {
return this.darkmode;
}
}
Затем введите ваш сервис, чтобы получить значение темного режима в любой сервис / компонент.
Но здесь, похоже, ваша проблема заключается в том, что ваши манипуляции с DOM (установите тёмный класс для тега body) не остаются при изменении маршрутов. Это может быть потому, что приложение перезагружается, как вы меняете маршрут? Вы должны использовать ссылку с атрибутом routerLink, таким образом, изменения DOM выполняются внутри, и ваш тег не изменится (и сохранит ваш класс).
<a routerLink="/heroes" routerLinkActive="active">Heroes</a>
Также предпочтительный способ манипулировать DOM с помощью angular должен использовать Renderer2:
@Component({
template: `<button (click)="toggleDarkmode()">Dark mode</button>`
})
export class MyComponentThatNeedsDarkModeValue {
constructor(private renderer: Renderer2) {}
toggleDarmode() {
this.renderer.addClass(document.body, 'dark');
}
}