我也实现了一个深色主题,但使用的是 Angular 而不是 Ionic。目的是将dark 类添加到body 元素中。
我和你分享我的代码:)
首先,创建一个组件 dark-mode.component :
import { DOCUMENT } from '@angular/common';
export class DarkModeComponent implements OnInit {
private class = 'dark';
private storage = 'darkMode';
@Input()
get value(): boolean {
return this.document.body.classList.contains(this.class);
}
set value(isDark: boolean) {
localStorage.setItem(this.storage, isDark.toString());
if (isDark) {
this.document.body.classList.add(this.class);
} else {
this.document.body.classList.remove(this.class);
}
}
constructor(@Inject(DOCUMENT) private document: Document) { }
ngOnInit() {
const value = localStorage.getItem(this.storage);
if (value) {
this.value = JSON.parse(value);
}
}
}
我使用本地存储来保留用户的选择。
这是 HTML(太复杂了):
<span (click)="value = !value">Switch theme</span>
我已经在我的 app.module.ts 中导入了这个组件:
@NgModule({
declarations: [
AppComponent,
...
DarkModeComponent
],
imports: [
BrowserModule,
AppRoutingModule,
BrowserAnimationsModule,
MaterialModule,
...
],
providers: [...],
bootstrap: [AppComponent],
})
export class AppModule { }
然后你只需要在 HTML 模板中调用你的组件,我把它放到一个 menu.component.html 中:
<dark-mode></dark-mode>
我希望它会有所帮助。