نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
نوفيل

منصة تعليم البرمجة الأولى بالعربي. تعلم من الصفر حتى الاحتراف مع كورسات احترافية وتحديات ذكاء اصطناعي.

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر

نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
AN

منهج Angular

دليل مرجعي شامل

كل اللغات
مدرسة البرمجة/منهج Angular /دمج تدفقات RxJS مع الإشارات باستخدام toSignal و toObservable

دمج تدفقات RxJS مع الإشارات باستخدام toSignal و toObservable

Angular 22.1Reactive StreamstoObservabletoSignalRxJS Integration

جدول مرجعي سريع

1
وجه المقارنة المعماريةدالة التحويل toSignalدالة التحويل toObservable
اتجاه التحويل والدمجتحويل تدفق البيانات (Observable) إلى إشارة تفاعلية (Signal)تحويل إشارة أنگولر (Signal) إلى تدفق زمني (Observable)
طريقة التعامل مع الاشتراكاتتدير الاشتراكات تلقائياً خلف الكود دون الحاجة لإلغاء الاشتراك اليدويتنشئ تدفقاً تفاعلياً يستجيب لتغيرات الإشارة ويتيح استخدام عوامل RxJS المختلفة
مكان الاستخدام الأمثلداخل سياق الحقن (`Injection Context`) لقراءة بيانات السيرفر أو التدفقات في القوالبعند الحاجة لتطبيق عمليات ربط معقدة مثل `debounceTime` أو `switchMap` على إشارات محلية

الشرح

في معمارية Angular 22.1 الحديثة، بينما تقود الإشارات (Signals) أسلوب إدارة الحالة وتحديث واجهات المستخدم، تظل مكتبة RxJS الأداة الأقوى للتعامل مع التدفقات الزمنية المعقدة واشتراكات الشبكة. الجسر الهندسي المتمثل في دالتي toSignal و toObservable يتيح للمطور دمج عالم التدفقات التقليدية مع عالم الإشارات الحديث بسلاسة تامة، مما يضمن توافقية النظام وتكامل الأكواد البرمجية القديمة والحديثة.

تفصيل فلسفة وعمل الجسر بين RxJS و Signals

التحويل الآمن للتدفقات (toSignal):

تتيح لك هذه الدالة قراءة مخرجات مكتبة RxJS (مثل طلبات HTTP من HttpClient) واستخدامها مباشرة كإشارة تفاعلية في القوالب دون الحاجة لاستخدام أنبوب async التقليدي، مع إدارة تلقائية لدورة حياة الاشتراك.

الاستفادة من عوامل RxJS عبر (toObservable):

عندما تحتاج إلى تنفيذ عمليات معقدة مثل التأخير (debounceTime) أو الدمج (combineLatest) على إشارات أنگولر، فإن تحويل الإشارة إلى تدفق يمنحك القوة الكاملة لمكتبة RxJS بكفاءة عالية.

⚠️ تحذير

تجنب إساءة استخدام دوال الجسر خارج سياق الحقن الصحيح! استخدام toSignal أو toObservable خارج سياق الحقن المعتمد (Injection Context) دون تمرير Injector صريح سيؤدي إلى انهيار التطبيق وأخطاء وقت التشغيل. احرص دائماً على استدعائهما داخل بناء المكون أو الخدمة مباشرة.

أمثلة برمجية موسعة: ملفات وتنسيق متنوع للتوضيح العملي

المثال الأول: ملف خدمة الجسر البرمجي (bridge-stream.service.ts)

typescript
1import { Injectable, signal } from '@angular/core';
2import { toObservable, toSignal } from '@angular/core/rxjs-interop';
3import { delay, of } from 'rxjs';
4
5@Injectable({
6 providedIn: 'root'
7})
8export class BridgeStreamService {
9 // إشارة محلية للبحث
10 readonly searchInputSignal = signal<string>('');
11
12 // تحويل الإشارة إلى Observable لتطبيق عوامل RxJS
13 readonly searchObservable = toObservable(this.searchInputSignal).pipe(
14 delay(300) // محاكاة تأخير البحث
15 );
16
17 // محاكاة تدفق بيانات قادم من سيرفر وتحويله إلى إشارة
18 readonly serverDataSignal = toSignal(
19 of(['بيانات النظام الأولية', 'بيانات الخادم المحدثة']).pipe(delay(1000)),
20 { initialValue: ['جاري التحميل...'] }
21 );
22
23 updateSearch(term: string) {
24 this.searchInputSignal.set(term);
25 }
26}

المثال الثاني: ملف القالب المرئي للمكون (bridge-demo.component.html)

html
1<!-- bridge-demo.component.html -->
2<div class="bridge-container">
3 <h3>لوحة دمج تدفقات RxJS مع الإشارات</h3>
4
5 <div class="stream-section">
6 <p><strong>بيانات السيرفر المحولة إلى إشارة:</strong></p>
7 <ul>
8 @for (item of streamService.serverDataSignal(); track $index) {
9 <li>{{ item }}</li>
10 }
11 </ul>
12 </div>
13
14 <div class="stream-section">
15 <input
16 type="text"
17 (input)="onSearch($event)"
18 placeholder="اكتب للبحث عبر تدفقات مرنة..."
19 class="bridge-input"
20 />
21 <p>قيمة إشارة البحث الحالية: <strong>{{ streamService.searchInputSignal() }}</strong></p>
22 </div>
23</div>

نصائح احترافية

  • —استخدم toSignal كبديل نظيف لأنبوب async في قوالب HTML!
  • —دمج تدفقات السيرفر كإشارات يسهل قراءتها داخل القوالب ويغنيك عن إدارة الاشتراكات اليدوية أو كتابة أكواد معقدة، مع ضرورة الانتباه لتوفير قيمة ابتدائية (initialValue) واضحة.

الدرس السابق

إخفاء وحماية حالة الخدمة باستخدام Readonly Signals و asReadonly

الدرس التالي

إدارة العمليات غير المتزامنة وحالات التحميل

نوفيل

منصة تعليم البرمجة الأولى بالعربي. تعلم من الصفر حتى الاحتراف مع كورسات احترافية وتحديات ذكاء اصطناعي.

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر