جاري التحميل...

مرجع صياغة القوالب

مرجع صياغة القوالب في أنجولار هو دليل متقدم يركز على كيفية تصميم وبناء القوالب الديناميكية ضمن بيئة مكونات أنجولار. يعتبر هذا المرجع حجر الزاوية لفهم كيفية إنشاء مكونات قابلة لإعادة الاستخدام، وإدارة الحالة، وتدفق البيانات بطريقة فعالة ضمن التطبيقات الحديثة، وخاصة تطبيقات الويب ذات الصفحة الواحدة (SPA). استخدام مرجع صياغة القوالب يضمن أن المكونات تتبع أفضل الممارسات، وتقلل من الأخطاء الشائعة مثل تمرير الخصائص بشكل زائد (prop drilling)، أو إعادة التقديم غير الضرورية (unnecessary re-renders)، أو تعديل الحالة بشكل غير آمن.
في تطوير أنجولار، يتم استخدام القوالب لربط المكونات بالبيانات، وتحديد كيفية عرض هذه البيانات وإدارتها خلال دورة حياة المكون. يشمل مرجع صياغة القوالب مفاهيم متقدمة مثل إدارة الحالة (State Management)، تدفق البيانات (Data Flow)، ودورة حياة المكون (Lifecycle Hooks)، والتي تعد أساسية لبناء تطبيقات قوية ومستقرة. من خلال هذا المرجع، سيتعلم المطور كيفية تصميم مكونات فعالة، كيفية التعامل مع الأحداث والبيانات بشكل آمن، وكيفية تحسين الأداء عن طريق تقليل العمليات غير الضرورية.
كما يقدم هذا المرجع سياقًا عمليًا لتطبيق هذه المفاهيم ضمن مشاريع أنجولار حقيقية، مع التركيز على استخدام القوالب لبناء مكونات متقدمة قابلة لإعادة الاستخدام. القارئ سيتعرف على كيفية كتابة قوالب أنجولار بطريقة تضمن أداءً عالياً، أماناً في البيانات، وتجربة مستخدم سلسة، مع الالتزام بالمعايير الحديثة لتطوير تطبيقات SPA.

مثال أساسي

typescript
TYPESCRIPT Code
import { Component } from '@angular/core';

@Component({
selector: 'app-user-card',
template: `       <div class="user-card">         <h2>{{ user.name }}</h2>         <p>البريد الإلكتروني: {{ user.email }}</p>         <button (click)="updateEmail()">تحديث البريد الإلكتروني</button>       </div>
`,
styles: [`
.user-card { border: 1px solid #ccc; padding: 16px; border-radius: 8px; }
`]
})
export class UserCardComponent {
user = { name: 'محمد', email: '[[email protected]](mailto:[email protected])' };

updateEmail() {
this.user = { ...this.user, email: '[[email protected]](mailto:[email protected])' };
}
}

في المثال أعلاه، نوضح كيفية بناء مكون أنجولار أساسي يستخدم مرجع صياغة القوالب. المكون UserCardComponent يحتوي على بيانات مستخدم ضمن كائن محلي user. يتم عرض البيانات باستخدام التوجيهات المدمجة من أنجولار مثل {{ }} لربط البيانات. نلاحظ أن عملية تحديث البريد الإلكتروني تتم بطريقة آمنة باستخدام النسخ الانتشاري للكائن {...this.user} لتجنب تعديل الحالة مباشرة، مما يقلل من الأخطاء المرتبطة بالحالة غير المتوقعة.
القالب HTML داخل المكون يوضح كيفية ربط الأحداث مع الوظائف (Event Binding) عبر (click)، ويظهر كيفية استخدام القوالب لعرض البيانات بطريقة واضحة ومرنة. هذا المثال يعكس أفضل ممارسات أنجولار في إدارة الحالة وتدفق البيانات ضمن المكونات، ويمنع مشاكل prop drilling أو إعادة تقديم غير ضرورية، مما يضمن أداءً أفضل في التطبيقات الكبيرة. يمكن استخدام هذا النمط كأساس لبناء مكونات أكثر تعقيداً وقابلة لإعادة الاستخدام ضمن مشاريع SPA.

مثال عملي

typescript
TYPESCRIPT Code
import { Component, Input, OnInit } from '@angular/core';

@Component({
selector: 'app-product-list',
template: `       <div *ngFor="let product of products" class="product-item">         <h3>{{ product.name }}</h3>         <p>السعر: {{ product.price | currency:'AED' }}</p>         <button (click)="addToCart(product)">أضف إلى السلة</button>       </div>
`,
styles: [`
.product-item { border: 1px solid #ddd; margin-bottom: 8px; padding: 12px; }
`]
})
export class ProductListComponent implements OnInit {
@Input() products: { name: string; price: number }[] = [];

ngOnInit() {
console.log('تم تحميل مكون قائمة المنتجات');
}

addToCart(product: { name: string; price: number }) {
console.log(`${product.name} تمت إضافته إلى السلة.`);
}
}

Advanced أنجولار Implementation

typescript
TYPESCRIPT Code
import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
import { BehaviorSubject } from 'rxjs';

@Component({
selector: 'app-advanced-user',
template: `       <div class="user-info">         <h2>{{ user$ | async | json }}</h2>         <button (click)="updateUserEmail()">تحديث البريد الإلكتروني</button>       </div>
`,
changeDetection: ChangeDetectionStrategy.OnPush,
styles: [`
.user-info { padding: 16px; border: 2px solid #888; border-radius: 10px; }
`]
})
export class AdvancedUserComponent {
private userSubject = new BehaviorSubject({ name: 'علي', email: '[[email protected]](mailto:[email protected])' });
user$ = this.userSubject.asObservable();

updateUserEmail() {
const currentUser = this.userSubject.getValue();
this.userSubject.next({ ...currentUser, email: '[[email protected]](mailto:[email protected])' });
}
}

أفضل الممارسات في أنجولار تتضمن تقسيم التطبيق إلى مكونات صغيرة وقابلة لإعادة الاستخدام، وإدارة الحالة بشكل آمن باستخدام نسخ كائنات immutable أو أدوات مثل BehaviorSubject لإدارة البيانات بشكل تفاعلي. يجب تجنب تمرير الخصائص عبر المكونات العميقة (prop drilling)، وتجنب تعديل الحالة مباشرة لتقليل الأخطاء وأداء أفضل. استخدام changeDetection: OnPush يحسن الأداء بشكل كبير لأنه يقلل من عمليات إعادة التقديم غير الضرورية.
من المهم مراقبة تدفق البيانات عبر المكونات وفهم دورة حياة المكونات للتعامل مع الأحداث بشكل صحيح. عند التصحيح، يمكن استخدام أدوات أنجولار DevTools لمراقبة التغييرات والتأكد من أن القوالب تعرض البيانات بدقة. للحفاظ على أمان التطبيق، يجب تجنب إدراج HTML غير موثوق مباشرة وتطبيق استراتيجيات الحماية ضد XSS.

📊 المرجع الشامل

Element/Method Description Syntax Example Notes
ngIf توجيه شرطي لإظهار أو إخفاء عنصر *ngIf="condition" <div *ngIf="isVisible">مرحباً</div> يستخدم لإدارة العرض الديناميكي
ngFor تكرار عناصر قائمة *ngFor="let item of items" <li *ngFor="let item of list">{{ item }}</li> فعال لعرض البيانات المصفوفية
ngClass إضافة فئات CSS ديناميكياً [ngClass]="{'active': isActive}" <div [ngClass]="{'active': isActive}"></div> يمكن استخدامه للتحكم في المظهر
ngStyle تطبيق أنماط CSS ديناميكية [ngStyle]="{'color': color}" <p [ngStyle]="{'color': textColor}">نص</p> مثالي للتصميمات التفاعلية
Input لتلقي بيانات من مكون أب @Input() data: string <child [data]="parentData"></child> يسمح بتمرير البيانات
Output لإرسال أحداث للمكون الأب @Output() event = new EventEmitter(); <button (click)="event.emit(data)">إرسال</button> للتفاعل بين المكونات
Event Binding ربط أحداث DOM بالوظائف (click)="function()" <button (click)="handleClick()">انقر</button> للتفاعل مع المستخدم
Property Binding ربط خصائص DOM بالبيانات [property]="value" <img [src]="imageUrl"> لتحديث الخصائص ديناميكياً
Lifecycle Hook وظائف دورة حياة المكون ngOnInit(){} ngOnInit(){console.log('تم التهيئة')} مراقبة المراحل المختلفة للمكون
ChangeDetection استراتيجية الكشف عن التغيير changeDetection: ChangeDetectionStrategy.OnPush @Component({changeDetection: OnPush}) تحسين الأداء عبر التحكم بإعادة التقديم

📊 Complete أنجولار Properties Reference

Property Values Default Description أنجولار Support
selector string '' تحديد اسم المكون لاستخدامه في HTML All versions
template string or TemplateRef '' HTML الخاص بالمكون All versions
styles string[] [] تحديد أنماط CSS للمكون All versions
providers any[] [] تعريف الخدمات الخاصة بالمكون All versions
changeDetection Default, OnPush Default استراتيجية الكشف عن التغيير All versions
inputs string[] [] تعريف خصائص الإدخال All versions
outputs string[] [] تعريف الأحداث الخارجة All versions
animations AnimationTriggerMetadata[] [] تعريف الرسوم المتحركة للمكون Angular 4+
encapsulation None, Emulated, ShadowDom Emulated تحكم في نطاق CSS All versions
viewProviders any[] [] توفير الخدمات للمكون وطفله All versions
host object {} ربط خصائص وأحداث المضيف All versions

ملخص وخطوات تالية: بعد إتقان مرجع صياغة القوالب في أنجولار، يكون المطور قادراً على بناء مكونات متقدمة قابلة لإعادة الاستخدام، مع فهم كامل لإدارة الحالة، تدفق البيانات، واستخدام دورات حياة المكون لتحسين الأداء والاستجابة. يتيح هذا المفهوم تطبيق أفضل ممارسات أنجولار في مشاريع SPA مع تقليل الأخطاء الشائعة وتحسين قابلية الصيانة.
الخطوة التالية تشمل دراسة موضوعات مثل خدمات أنجولار (Services)، التوجيه الديناميكي (Routing)، وإدارة الحالة المتقدمة باستخدام NgRx أو BehaviorSubject. ينصح بتطبيق ما تم تعلمه في مشاريع حقيقية لتثبيت المعرفة، مع متابعة مستمرة للوثائق الرسمية والموارد المجتمعية لمواكبة تحديثات أنجولار. يمكن دمج مرجع صياغة القوالب مع أنماط تصميم متقدمة مثل Redux وReactive Forms لتعزيز إنتاجية التطبيقات وأمان البيانات.

🧠 اختبر معرفتك

جاهز للبدء

اختبر معرفتك

تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع

4
الأسئلة
🎯
70%
للنجاح
♾️
الوقت
🔄
المحاولات

📝 التعليمات

  • اقرأ كل سؤال بعناية
  • اختر أفضل إجابة لكل سؤال
  • يمكنك إعادة الاختبار عدة مرات كما تريد
  • سيتم عرض تقدمك في الأعلى