برنامه نویسی

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 سپاسگزاریم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا