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

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

المنصة

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

الحساب

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

روابط

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

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

صُنع بـ في مصر

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

منهج Angular

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

كل اللغات
مدرسة البرمجة/منهج Angular / المعالجات والتنفيذات الوظيفية المتقدمة

المعالجات والتنفيذات الوظيفية المتقدمة

Functional InterceptorsHttpHandlerFnHTTP MiddlewaresRequest PipelinesAngular Architecture

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

1
وجه المقارنة المعماريةالمعترضات التقليدية القائمة على الأصناف (`Class-based`)المعترضات الوظيفية الحديثة (`Functional Interceptors`)
طريقة التنفيذ والكتابةصنف برمجي يعتمد على واجهة `HttpInterceptor` ويحتاج لتسجيل معقددالة برمجية نقية (`Pure Function`) تُستدعى مباشرة وتمرر عبر `withInterceptors`
الاعتماديات وحقنهاتتطلب حقن الاعتماديات داخل constructor الصنف بطرق معقدة أحياناًتستفيد مباشرة من دالة `inject()` الحديثة بكل مرونة وداخل نطاق الدالة
سهولة التركيب والصيانةمعقدة عند الرغبة في دمج أو ترتيب عدة معترضات بالتسلسلسهلة للغاية وقابلة للتركيب والتسلسل بسلاسة تامة داخل إعدادات التطبيق

الشرح

تحولت معالجات الطلبات والعمليات الوسيطة (Interceptors) من الأنماط القائمة على الأصناف القديمة إلى الدلالات الوظيفية الخالصة (Functional Interceptors). تتيح لك هذه المعالجات الوظيفية اعتراض طلبات HTTP واستجاباتها، تعديل الترويسات (Headers)، معالجة الأخطاء مركزياً، وتوجيه مسار تدفق البيانات بكفاءة عالية عبر خطوط أنابيب نظيفة وقابلة للتركيب (Composable Pipelines).

تفصيل فلسفة وعمل المعالجات الوظيفية المتقدمة

خطوط أنابيب الطلبات الوظيفية (Request Pipelines):

يعتمد النظام الوظيفي الجديد على تمرير الطلب (HttpRequest) مع دالة تنفيذ (HttpHandlerFn) تسمى لتمرير الطلب إلى المعالج التالي في السلسلة، مما يمنح المطور تحكماً كاملاً في ما قبل وبعد إرسال الطلب للخادم.

الاستقلالية وخفة الأداء (Lightweight Architecture):

التخلص من هيكل الأصناف والـ Classes يقلل من حجم الملفات الناتجة (Bundle Size) ويسهل اختبار المعالجات بشكل مستقل تماماً عبر استدعاء الدالة وتمرير بيانات وهمية لها.

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

المثال الأول: ملف المعترض الوظيفي المتقدم لإضافة المصادقة والمعالجة (auth-interceptor.ts)

typescript
1import { HttpInterceptorFn, HttpRequest, HttpHandlerFn, HttpEvent } from '@angular/common/http';
2import { inject } from '@angular/core';
3import { Observable } from 'rxjs';
4
5export const authInterceptor: HttpInterceptorFn = (
6 req: HttpRequest<unknown>,
7 next: HttpHandlerFn
8): Observable<HttpEvent<unknown>> => {
9 // حقن أي خدمة مطلوبة مباشرة عبر دالة inject الحديثة
10 // const authService = inject(AuthService);
11
12 const clonedRequest = req.clone({
13 setHeaders: {
14 'Authorization': 'Bearer enterprise-token-22.1',
15 'X-Client-Version': '22.1.0'
16 }
17 });
18
19 // تمرير الطلب المعدل إلى المعالج التالي في السلسلة
20 return next(clonedRequest);
21};

المثال الثاني: ملف تسجيل وتكوين المعترض في إعدادات التطبيق (app.config.ts)

typescript
1import { ApplicationConfig } from '@angular/core';
2import { provideHttpClient, withInterceptors } from '@angular/common/http';
3import { authInterceptor } from './auth-interceptor';
4
5export const appConfig: ApplicationConfig = {
6 providers: [
7 // تفعيل الـ HttpClient مع دمج المعترضات الوظيفية بسلاسة
8 provideHttpClient(
9 withInterceptors([authInterceptor])
10 )
11 ]
12};

⚠️ تحذير

احذر من تعديل الكائن الأصلي للطلب مباشرة (Mutation)! كائنات الطلب في أنگولر غير قابلة للتغيير (Immutable). يجب عليك دائماً استخدام req.clone() لإنشاء نسخة معدلة قبل تمريرها إلى دالة المعالجة التالية next().

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

  • —استخدم المعترضات الوظيفية (Functional Interceptors) حصرياً في أنگولر الحديثة!
  • —ابتعد تماماً عن الأصناف القديمة التي تعتمد على HttpInterceptor، لأن المعترضات الوظيفية أسرع، أنظف، وتتوافق بشكل كامل مع معمارية الإشارات ودالة inject().

الدرس السابق

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

الدرس التالي

استخدام وظيفة runInInjectionContext لتنفيذ الشيفرات خارج سياق الحقن المباشر

نوفيل

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

المنصة

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

الحساب

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

روابط

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

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

صُنع بـ في مصر