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

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

المنصة

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

الحساب

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

روابط

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

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

صُنع بـ في مصر

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

منهج Angular

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

كل اللغات
مدرسة البرمجة/منهج Angular /حقن الخدمات محلياً على مستوى المكونات

حقن الخدمات محلياً على مستوى المكونات

Component-Level ProvidersLocal DIComponent IsolationAngular ArchitectureServices

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

1
وجه المقارنة المعماريةالتوفير في الجذر (`providedIn: 'root'`)التوفير على مستوى المكون (`Component-Level Providers`)
دورة الحياة (Lifecycle)تعيش الخدمة طوال فترة تشغيل التطبيق بالكامل (`Singleton`)تبدأ مع إنشاء المكون وتُدمر تلقائياً فور تدميره (`Destroyed with Component`)
مشاركة الحالة (State Sharing)مشتركة ومرئية لجميع المكونات في التطبيقمعزولة وخاصة حصرياً بنسخة المكون الحالي وشجرته الفرعية فقط
الاستخدام النموذجي (Use Cases)إدارة الحالة العامة، المصادقة، والاتصال بالخوادم (`APIs`)إدارة حالة النماذج المعقدة، المكونات المؤقتة، أو العناصر القابلة للتكرار

الشرح

يُعد توفير الخدمات محلياً داخل المكونات عبر مصفوفة providers أداة هندسية قوية لعزل الحالة (State Isolation). بدلاً من مشاركة نفس النسخة من الخدمة على مستوى التطبيق بالكامل (root)، يتيح لك هذا النمط إنشاء نسخة جديدة ومستقلة تماماً من الخدمة لكل مكون يتم فتحه أو عرضه، مما يمنع تداخل البيانات بين العناصر المتعددة في واجهة المستخدم.

تفصيل فلسفة وعمل الحقن المحلي في المكونات

العزل التام للحالة (Instance Isolation):

عندما يحتوي صفحة ما على عدة بطاقات أو مكونات متشابهة، فإن توفير الخدمة محلياً يضمن أن كل بطاقة تمتلك عداداً أو بيانات خاصة بها لا تؤثر ولا تتأثر بالبطاقات المجاورة.

التنظيف التلقائي للموارد (Automatic Cleanup):

بما أن دورة حياة الخدمة مرتبطة ارتباطاً وثيقاً بالمكون، فإن تدمير المكون ينعكس فوراَ على تدمير الخدمة، مما يمنع تسريبات الذاكرة (Memory Leaks) في التطبيقات الضخمة.

⚠️ تحذير

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

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

المثال الأول: ملف الخدمة المحلية (item-detail.service.ts)

typescript
1import { Injectable } from '@angular/core';
2
3// خدمة محلية بدون providedIn: 'root' لتخصيصها للمكون حصرياً
4@Injectable()
5export class ItemDetailService {
6 private status = 'غير نشط';
7
8 getStatus(): string {
9 return this.status;
10 }
11
12 activate(): void {
13 this.status = 'نشط ومفعل محلياً';
14 }
15}

المثال الثاني: ملف المكون الذي يطبق الحقن المحلي (item-detail.component.ts)

typescript
1import { Component, inject } from '@angular/core';
2import { CommonModule } from '@angular/common';
3import { ItemDetailService } from './item-detail.service';
4
5@Component({
6 selector: 'app-item-detail',
7 standalone: true,
8 imports: [CommonModule],
9 // توفير الخدمة محلياً لإنشاء نسخة معزولة لكل مكون
10 providers: [ItemDetailService],
11 template: `
12 <div class="local-container">
13 <h3>حقن الخدمات محلياً على مستوى المكونات (Component-Level Providers)</h3>
14 <p class="status-text">حالة العنصر: <strong>{{ itemService.getStatus() }}</strong></p>
15 <button (click)="itemService.activate()" class="activate-btn">تفعيل محلياً</button>
16 </div>
17 `,
18 styles: [`
19 .local-container { background: #090d16; color: #fff; padding: 24px; border-radius: 12px; border: 1px solid #1e293b; margin-top: 10px; }
20 .status-text { background: #1e293b; padding: 12px; border-radius: 6px; color: #38bdf8; font-weight: bold; }
21 .activate-btn { background: #10b981; color: #090d16; border: none; padding: 8px 16px; border-radius: 6px; font-weight: bold; cursor: pointer; margin-top: 8px; }
22 `]
23})
24export class ItemDetailComponent {
25 readonly itemService = inject(ItemDetailService);
26}

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

  • —استخدم الحقن المحلي عندما تتطلب المكونات استقلالية كاملة في البيانات!
  • —إذا كنت تريد أن يتصرف كل مكون ككيان مستقل بذاته دون مشاركة الحالة مع بقية التطبيق، ضع الخدمة في مصفوفة providers الخاصة بالمكون فوراً.

الدرس السابق

تقييد توفر الخدمة باستخدام providedIn platform و providedIn an'

الدرس التالي

استخدام InjectionToken لتوفير القيم والاعتماديات غير النمطية

نوفيل

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

المنصة

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

الحساب

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

روابط

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

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

صُنع بـ في مصر