البرمجة

الحصول على قيمة Observable في Angular 2 بدون الاشتراك

في البداية، يجب أن نشير إلى أن استخدام مكتبة RxJS في Angular يسهل علينا إدارة الحدث والاشتراك فيه، ولكن الحصول على القيمة الحالية لمتغير isLoggedIn دون الاشتراك يمكن أن يكون تحديًا. في Angular، يتم التعامل مع قيم مثل هذه عادةً باستخدام Observables.

تجدر الإشارة إلى أنه في هذا السياق، يمكن أن تكون هناك عدة طرق للتعامل مع هذه الحالة، ولكننا سنركز على استخدام BehaviorSubject لتحقيق الهدف المطلوب.

لتحقيق هذا، يمكنك تعديل كود الخدمة SessionStorage لاستخدام BehaviorSubject بدلاً من Subject. يمكن تحديث الكود كما يلي:

typescript
import {Storage} from './storage'; import {Injectable} from 'angular2/core'; import {BehaviorSubject} from 'rxjs/BehaviorSubject'; @Injectable() export class SessionStorage extends Storage { private _isLoggedInSource = new BehaviorSubject<boolean>(/* initial value */ false); isLoggedIn = this._isLoggedInSource.asObservable(); constructor() { super('session'); } setIsLoggedIn(value: boolean) { this.setItem('_isLoggedIn', value, () => { this._isLoggedInSource.next(value); }); } getCurrentLoggedInValue(): boolean { return this._isLoggedInSource.value; } }

الآن، بعد تحديث الكود، يمكنك استخدام الدالة getCurrentLoggedInValue للحصول على القيمة الحالية لـ isLoggedIn بدون الاشتراك في Observable:

typescript
// في مكان ما داخل الكومبوننت أو الخدمة الذي تحتاج فيه للقيمة الحالية const currentLoggedInValue = sessionService.getCurrentLoggedInValue(); console.log(currentLoggedInValue);

يرجى مراعاة أن هذه الطريقة تقدم لك قيمة في اللحظة الحالية ولا تتابع التغييرات فيما بعد، ولذا إذا كنت بحاجة إلى متابعة التغييرات، سيكون من الأفضل الاشتراك في Observable كما كانت الحالة الأصلية.

المزيد من المعلومات

في هذا السياق، يُعد الاستعلام عن القيمة الحالية لمتغير “isLoggedIn” في خدمة Angular 2 الخاصة بك مهمة ضرورية. عندما تحتاج إلى الحصول على قيمة محددة لـ “isLoggedIn” من دون الحاجة إلى الاشتراك، يمكنك اللجوء إلى استخدام نهجين محتملين: النهج الأول يتعلق بتخزين القيمة في متغير محلي بمجرد حدوث تغيير في القيمة، بينما يشمل النهج الثاني استخدام BehaviorSubject من RxJS.

في البداية، يُفضل تجنب تخزين قيمة “isLoggedIn” في متغير محلي، حيث يمكن أن يؤدي ذلك إلى مشكلات محتملة في التحديث والتنسيق بين المكونات. بدلاً من ذلك، يمكنك استخدام BehaviorSubject الذي يوفر لك وسيلة للوصول إلى القيمة الحالية دون الحاجة إلى الاشتراك.

على سبيل المثال، يمكنك تحديث الخدمة الخاصة بك كما يلي:

typescript
import { BehaviorSubject } from 'rxjs'; @Injectable() export class SessionStorage extends Storage { private _isLoggedInSource = new BehaviorSubject<boolean>(false); isLoggedIn = this._isLoggedInSource.asObservable(); constructor() { super('session'); } setIsLoggedIn(value: boolean) { this.setItem('_isLoggedIn', value, () => { this._isLoggedInSource.next(value); }); } getCurrentValue(): boolean { return this._isLoggedInSource.value; } }

باستخدام BehaviorSubject، يمكنك الآن استخدام الوظيفة “getCurrentValue” للوصول إلى القيمة الحالية لـ “isLoggedIn” دون الحاجة إلى الاشتراك. يمكنك ببساطة استدعاء هذه الوظيفة في المكون الذي يحتاج إلى القيمة الحالية.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر