📖 ما هو Angular ولماذا تختاره؟
Angular هو إطار عمل (Framework) شامل وقوي من تطوير Google لبناء تطبيقات ويب كبيرة ومعقدة. بخلاف React التي تُعتبر مجرد مكتبة للواجهات، Angular توفر حلاً متكاملاً يشمل التوجيه (Routing)، إدارة الحالة (State Management)، الحقن (Dependency Injection)، والاختبار - كل ذلك في إطار عمل واحد مترابط.
Angular مبنية على TypeScript، وهي نسخة مطورة من JavaScript تضيف الأنواع الثابتة (Static Typing) والبرمجة الموجهة للكائنات (OOP). ده بيخلّيها أكثر تنظيماً في المشاريع الكبيرة، لكنه بيضيف طبقة تعقيد للمبتدئين.
بنهاية هذا الدرس، هتعرف:
- الفرق الجوهري بين React و Angular ومتى تختار كل واحد
- كيف تنشئ مشروع Angular من الصفر باستخدام Angular CLI
- هيكل الملفات في Angular والفرق عن React
- أنواع الربط (Data Binding) في Angular وإزاي تستخدمها
- التوجيهات (Directives) وإزاي تتحكم في عرض العناصر
- الخدمات (Services) و Dependency Injection
🔄 React vs Angular: مقارنة شاملة
اختيار الإطار المناسب بيعتمد على حجم المشروع، خبرة الفريق، والمتطلبات التقنية. الجدول ده بيُلخّص الفروقات الرئيسية:
| الجانب | React | Angular |
|---|---|---|
| النوع | مكتبة UI فقط | إطار عمل كامل (Full Framework) |
| اللغة | JavaScript + JSX | TypeScript (إجباري) |
| منحنى التعلم | أسهل للمبتدئين | أكثر تعقيداً (TypeScript + OOP) |
| الأداء | سريع (Virtual DOM) | قوي للتطبيقات الكبيرة (Change Detection) |
| Routing | مكتبة منفصلة (React Router) | مدمجة في الإطار |
| State Management | Redux أو Context (منفصلة) | RxJS + Services (مدمجة) |
| Forms | HTML Forms + State يدوي | Reactive Forms و Template-driven Forms |
| Testing | Jest + React Testing Library (منفصل) | Jasmine + Karma (مدمج) |
| الشركة الداعمة | Meta (Facebook) |
⚡ إنشاء مشروع Angular من الصفر
Angular بتستخدم أداة سطر أوامر اسمها Angular CLI (Command Line Interface). الأداة دي بتسهّل عليك إنشاء المشروع، إضافة المكونات، وبناء التطبيق للإنتاج. خليني نبدأ:
الخطوة 1: تثبيت Angular CLI
الأمر npm install -g بيثبت Angular CLI على مستوى النظام، يعني تقدر تستخدم ng من أي مكان في الجهاز.
الخطوة 2: إنشاء مشروع جديد
لما تشغل الأمر ده، Angular CLI هيسألك سؤالين:
- Would you like to add Angular routing? اختار Yes لو هتحتاج تنقل بين صفحات.
- Which stylesheet format? اختار CSS لو مبتدئ، أو SCSS لو عايز ميزات إضافية.
الخطوة 3: تشغيل سيرفر التطوير
الأمر ng serve بيشغل سيرفر محلي مع Hot Reload - يعني أي تغيير تعمله في الكود هيظهر في المتصفح فوراً من غير ما تعيد تحميل الصفحة.
📁 فهم هيكل ملفات مشروع Angular
Angular بتفرض هيكل معين للملفات. ده ممكن يبقى مربك في الأول، لكنه بيساعد في تنظيم المشاريع الكبيرة. خليني نشرح كل ملف:
⚠️ ملاحظة مهمة
عكس React اللي بيخلّيك حر في تنظيم الملفات، Angular بتفرض الهيكل ده. كل مكون لازم يكون مسجل في Module (declarations array) عشان يشتغل.
🧩 المكونات (Components) في Angular
مكون Angular بيتكون من 3 ملفات أساسية (وأحياناً 4 لو حسبت الاختبار):
- .ts - المنطق (TypeScript Class)
- .html - القالب (Template)
- .css - الأنماط (Styles)
المكون بيتعرف باستخدام Decorator اسمه @Component، وهو دالة بتضيف metadata للClass.
📝 الـ Template - قالب العرض في Angular
قالب Angular بيستخدم HTML عادي مع إضافات خاصة للربط بالبيانات. ده مختلف عن JSX في React اللي بيمزج JavaScript مع HTML.
🔍 شرح أنواع الربط (Data Binding):
| النوع | الصيغة | الاتجاه | الاستخدام |
|---|---|---|---|
| Interpolation | {{ value }} |
Component → Template | عرض نصوص وأرقام |
| Property Binding | [property]="value" |
Component → Template | تعيين خصائص HTML |
| Event Binding | (event)="handler()" |
Template → Component | معالجة النقرات والأحداث |
| Two-way Binding | [(ngModel)]="value" |
↔️ الاتجاهين | النماذج والمدخلات |
🎯 التوجيهات (Directives) في Angular
التوجيهات هي أوامر خاصة بتضيفها للـ Template عشان تتحكم في سلوك العناصر. Angular فيها نوعين:
- Structural Directives: بتغير هيكل DOM (إضافة/حذف عناصر)
- Attribute Directives: بتغير مظهر أو سلوك عنصر موجود
* قبل اسم التوجيه (زي *ngFor) بتعني إن التوجيه ده Structural - يعني بيغير هيكل DOM. من غير النجمة (زي [ngClass]) بيكون Attribute Directive.
⚙️ الخدمات (Services) و Dependency Injection
الخدمات (Services) هي فئات TypeScript بتعمل مهام محددة (زي جلب البيانات من API، إدارة الحالة، أو العمليات الحسابية). الميزة إنها قابلة للمشاركة بين أكتر من مكون.
Dependency Injection (DI) هو نمط تصميم في Angular بيسمح للمكونات "تطلب" الخدمات اللي تحتاجها بدل ما تخلقها بنفسها. Angular بتدير إنشاء وإعادة استخدام الكائنات تلقائياً.
⚠️ ملاحظة عن RxJS و Observables
Angular بتستخدم RxJS لإدارة البيانات غير المتزامنة (Async). Observable هي كائن بيعمل Subscribe للبيانات. لازم تفهم subscribe و unsubscribe عشان تتجنب Memory Leaks.
⚠️ أخطاء شائعة في Angular وتجنبها
❌ الخطأ 1: نسيان تسجيل المكون في Module
المشكلة: المكون مش بيظهر وبتطلع خطأ في Console.
الحل: تأكد إن المكون موجود في مصفوفة declarations في app.module.ts.
❌ الخطأ 2: تعديل Properties مباشرة من Template
المشكلة: Angular بتستخدم One-way Data Flow افتراضياً. مش هتقدر تعدل State من Template.
الحل: استخدم Event Binding ودوال في المكون عشان تعدل البيانات.
❌ الخطأ 3: نسيان unsubscribe من Observables
المشكلة: Memory Leak لما المكون يُحذف لكن الـ Observable لسه شغال.
الحل: استخدم takeUntil أو async pipe في Template.
✅ متى تختار Angular؟
Angular مش مناسب لكل مشروع. خليني نلخّص متى يكون الاختيار الأمثل:
- تطبيقات Enterprise كبيرة: لما يكون عندك 50+ شاشة وفريق من 10+ مطورين.
- فريق عمل كبير: Angular بتفرض معايير صارمة (TypeScript، هيكل ملفات موحد) فالكود بيبقى متناسق.
- صيانة طويلة الأجل: الكود المنظم بيسهل الصيانة بعد سنوات.
- تطبيقات CRUD معقدة: Forms كتيرة، جداول بيانات، تقارير.
- لو عايز كل شيء في إطار واحد: Routing, Forms, HTTP, Testing - كلها موجودة من غير مكتبات خارجية.
📚 دروس ذات صلة
❓ أسئلة شائعة عن Angular
هل Angular أصعب من React؟
نعم، Angular أصعب في البداية لأنها تتطلب فهم TypeScript، OOP، و RxJS. لكن بعد ما تتجاوز منحنى التعلم الأولي، هتلاقي إن الهيكل الصارم بيسهل العمل في المشاريع الكبيرة. React أسهل للمبتدئين لأنها بتعتمد على JavaScript العادي.
هل Angular ماتت بعد ظهور React؟
لا، Angular لسه قوية جداً في سوق العمل. شركات كبيرة زي Google، Microsoft، PayPal، و Forbes بتستخدم Angular. الفرق إن React بتسيطر على المشاريع الناشئة (Startups) بينما Angular بتسيطر على المؤسسات الكبيرة (Enterprise).
هل أحتاج أتعلم React قبل Angular؟
مش إجباري، لكنه مستحسن. React بتعلمك المفاهيم الأساسية (Components, State, Props) بطريقة أبسط. بعد React، هتلاقي Angular أسهل بكتير لأنك هتفهم المفاهيم ومحتاج بس تتعلم الصيغة الجديدة.
ما الفرق بين AngularJS و Angular؟
AngularJS (2010) هي النسخة القديمة المبنية على JavaScript. Angular (2+) هي إعادة بناء كاملة من الصفر باستخدام TypeScript. مفيش توافق بينهم - لو شغلت على AngularJS، لازم تتعلم Angular من جديد.