Dark mode has several advantages:
Steps to Build a Dark Mode Theme Switcher in Angular
1. Create an Angular Project
ng new angular-dark-mode
2. Define CSS Variables for Themes
:root {
--background-color: #ffffff;
--text-color: #000000;
--button-background: #007bff;
--button-color: #ffffff;
}
:root.dark-mode {
--background-color: #121212;
--text-color: #ffffff;
--button-background: #4a90e2;
--button-color: #ffffff;
}
body {
background-color: var(--background-color);
color: var(--text-color);
}
button {
background-color: var(--button-background);
color: var(--button-color);
border: none;
padding: 10px;
cursor: pointer;
}
3. Create a Theme Service to Manage Dark Mode
ng generate service services/theme
In theme.service.ts, implement the logic to toggle and save the theme:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class ThemeService {
private readonly DARK_MODE_CLASS = 'dark-mode';
private readonly THEME_KEY = 'theme';
constructor() {
const savedTheme = localStorage.getItem(this.THEME_KEY);
if (savedTheme === 'dark') {
this.enableDarkMode();
} else {
this.enableLightMode();
}
}
enableDarkMode() {
document.documentElement.classList.add(this.DARK_MODE_CLASS);
localStorage.setItem(this.THEME_KEY, 'dark');
}
enableLightMode() {
document.documentElement.classList.remove(this.DARK_MODE_CLASS);
localStorage.setItem(this.THEME_KEY, 'light');
}
toggleTheme() {
if (document.documentElement.classList.contains(this.DARK_MODE_CLASS)) {
this.enableLightMode();
} else {
this.enableDarkMode();
}
}
}
4. Add a Theme Switcher in Your Component
Edit your app.component.ts file to inject the ThemeService and create a method for theme switching:
import { Component } from '@angular/core';
import { ThemeService } from './services/theme.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'angular-dark-mode';
constructor(private themeService: ThemeService) {}
toggleTheme() {
this.themeService.toggleTheme();
}
}
In app.component.html, add a button that toggles the theme:
<div class="app-container"> <h1>Angular Dark Mode Theme Switcher</h1> <button (click)="toggleTheme()">Toggle Dark Mode</button> </div>
5. Styling the Component for Dark Mode
<div class="card"> <h2>Card Title</h2> <p>This is an example card that adapts to the current theme.</p> </div> <button (click)="toggleTheme()"> <fa-icon [icon]="['fas', 'sun']" *ngIf="isDarkMode"></fa-icon> <fa-icon [icon]="['fas', 'moon']" *ngIf="!isDarkMode"></fa-icon> </button>
.card {
background-color: var(--background-color);
color: var(--text-color);
border: 1px solid #ccc;
padding: 15px;
border-radius: 5px;
}
6. Test and Enjoy
ng serve