BrowserStateService: یک نقطه از حقیقت برای حالت حالت تاریک در Angular

از آنجایی که کاربران بیشتر و بیشتر حالت تاریک را در دستگاه های خود ترجیح می دهند، توسعه دهندگان وب باید با ارائه پشتیبانی از حالت تاریک در برنامه های وب خود، با این روند همراه باشند. این را می توان از راه های مختلفی به دست آورد، اما حفظ حالت تاریک در سراسر برنامه می تواند یک کار دلهره آور باشد، به خصوص که بزرگتر می شود. یک راه حل خوب این است که از یک نقطه حقیقت واحد در سرویسی استفاده کنید که حالت تاریک را در تمام اجزا حفظ کند. اینجاست که BrowserStateService وارد می شود.
TLDR
- BrowserStateService یک سرویس Angular است که حالت تاریک را در یک برنامه Angular حفظ می کند.
- به تغییرات کلاس تاریک در عنصر بدنه گوش می دهد، و قابل مشاهده ای را ارائه می دهد که اجزا می توانند برای مشاهده تغییرات در حالت تاریک، مشترک شوند.
- این سرویس روش هایی را برای تغییر حالت و تنظیم آن بر روی یک مقدار خاص ارائه می دهد.
- به تغییرات در طرح رنگ مورد نظر کاربر در سطح سیستم عامل گوش می دهد و بر اساس آن حالت اولیه را تنظیم می کند.
- استفاده از این سرویس می تواند به حفظ یک نقطه حقیقت برای حالت تاریک در یک برنامه Angular کمک کند.
کد
browserstate.service.ts
به نظر می رسد این است:
import { BehaviorSubject } from 'rxjs';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class BrowserStateService {
private isDarkModeSubject = new BehaviorSubject<boolean>(false);
public isDarkMode$ = this.isDarkModeSubject.asObservable();
constructor() {
// Check if 'dark' class is present on body element on initialization
this.isDarkModeSubject.next(document.body.classList.contains('dark'));
// Watch for changes to 'dark' class on body element
new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.attributeName === 'class') {
const isDark = document.body.classList.contains('dark');
this.isDarkModeSubject.next(isDark);
}
});
}).observe(document.body, { attributes: true });
// Listen for user's preferred color scheme
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
mediaQuery.addEventListener('change', (event) => {
const isDark = event.matches;
this.setDarkMode(isDark);
});
// Set initial mode based on user's preferred color scheme
if (mediaQuery.matches) {
this.setDarkMode(true);
}
}
toggleMode() {
const isDark = !this.isDarkModeSubject.value;
this.setDarkMode(isDark);
}
setDarkMode(isDark: boolean) {
if (isDark) {
document.body.classList.add('dark');
} else {
document.body.classList.remove('dark');
}
this.isDarkModeSubject.next(isDark);
}
}
نحوه استفاده
برای استفاده از BrowserStateService در برنامه Angular خود، این مراحل را دنبال کنید:
1) یک فایل جدید با نام ایجاد کنید browser-state.service.ts
در پروژه Angular شما src/app
فهرست راهنما.
2) کد را از مثال قسمت قبل کپی کرده و در قسمت Paste کنید browser-state.service.ts
فایل.
3) سرویس را در هر مؤلفه ای که می خواهید وضعیت حالت تاریک را مشاهده یا تغییر دهید، وارد کنید:
import { BrowserStateService } from './browser-state.service';
4) سرویس را در سازنده کامپوننت تزریق کنید:
constructor(private browserStateService: BrowserStateService) {}
شما همچنین می توانید آن را به عنوان وارد کنید public
اگر به عنوان مثال می خواهید از آن در قالب خود مانند این استفاده کنید: {{ browserStateService.isDarkKode$ || async }}
.
5) از isDarkMode$
قابل مشاهده برای مشاهده تغییرات در حالت تاریک، و setDarkMode()
و toggleMode()
روش های تغییر حالت تاریک:
// Subscribe to changes to the state of dark mode
this.browserStateService.isDarkMode$.subscribe(isDarkMode => {
// Do something based on the value of isDarkMode
});
// Set the state of dark mode
this.browserStateService.setDarkMode(true);
// Toggle the state of dark mode
this.browserStateService.toggleMode();
مثال استفاده
در اینجا مثالی از نحوه استفاده از BrowserStateService در کامپوننت Angular آورده شده است:
import { Component, OnInit } from "@angular/core";
import { BrowserStateService } from "./browser-state.service";
@Component({
selector: "app-my-component",
template: `
<div [ngClass]="{ 'dark-mode': isDarkMode }">
<p>Some text in the component.</p>
<button (click)="toggleMode()">Toggle Mode</button>
</div>
`,
})
export class MyComponent implements OnInit {
isDarkMode: boolean;
constructor(private browserStateService: BrowserStateService) {}
ngOnInit() {
// Subscribe to changes to the
// state of dark mode
this.browserStateService.isDarkMode$.subscribe((isDarkMode) => {
this.isDarkMode = isDarkMode;
});
}
toggleMode() {
this.browserStateService.toggleMode();
}
}
در این مثال، ما از ngClass
بخشنامه اعمال مشروط dark-mode
کلاس به div
عنصر بر اساس مقدار isDarkMode
ویژگی. ما همچنین از یک دکمه برای فراخوانی استفاده می کنیم toggleMode()
روش از BrowserStateService
برای تغییر وضعیت حالت تاریک.
نتیجه
این BrowserStateService
یک راه ساده و موثر برای حفظ حالت تاریک در یک برنامه Angular است. با استفاده از یک نقطه حقیقت واحد در یک سرویس، می توانید از پیچیدگی مدیریت حالت تاریک در چندین مؤلفه جلوگیری کنید و تجربه کاربری سازگارتری را ارائه دهید. این BrowserStateService
به تغییرات در گوش می دهد dark
کلاس در body
عنصر، و روش هایی را برای تغییر حالت و تنظیم آن بر روی یک مقدار خاص ارائه می دهد. علاوه بر این، به تغییرات در طرح رنگ مورد نظر کاربر در سطح سیستم عامل گوش می دهد و بر اساس آن حالت اولیه را تنظیم می کند.
از ChatGPT برای ارائه کد این سرویس مفید Angular سپاسگزاریم.