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

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

المنصة

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

الحساب

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

روابط

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

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

صُنع بـ في مصر

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

منهج Angular

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

كل اللغات
مدرسة البرمجة/منهج Angular /ربط البيانات مع المكونات الفرعية باستخدام الخصائص

ربط البيانات مع المكونات الفرعية باستخدام الخصائص

خصائص المكوناتAngular Inputsتمرير البيانات من الأعلى للأسفلخاصية input الحديثةAngular 22.1

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

1
معيار الإدخال البرمجيالأسلوب التقليدي (Decorator @Input)الأسلوب الحديث المعتمد على الإشارات (input API)
طريقة التعريف في صنف المكون@Input() propertyName: string = '';propertyName = input<string>('defaultValue'); أو input.required<string>();
كيفية قراءة القيمة داخل المكوناستدعاء اسم المتغير مباشرة كخاصية (this.propertyName)استدعاء المتغير كدالة تفاعلية (this.propertyName())
إدارة القيم الافتراضية والنوعيةتعتمد على القيم الابتدائية التقليدية وتفتقر للصرامة أحياناًدعم كامل للأنواع وإلزامية التحديد عبر input.required بكل أمان هندسي
التكامل مع نظام Signals والإشاراتتتطلب ربطاً إضافياً أو مراقبة عبر ngOnChangesمتوافقة كلياً وبشكل تلقائي مع الإشارات المحسوبة والتأثيرات

الشرح

صل في هذا الدرس الخامس من الفصل السادس إلى إحدى أهم ركائز بناء العمارة البرمجية في أنجولر، ألا وهي ربط البيانات مع المكونات الفرعية باستخدام الخصائص (Component Inputs) في إصدار Angular 22.1. تتيح لك هذه الميزة تمرير البيانات بسلاسة وأمان من المكون الأب إلى المكونات الفرعية التابعة له. وفي الإصدارات الحديثة، أصبحت الخصائص تُعرف كإشارات (signals-based inputs)، مما يمنحها قوة تفاعلية فائقة وسرعة مذهلة في الاستجابة للتغيرات.

تفصيل فلسفة وعمل مدخلات المكونات الحديثة

الخصائص المطلوبة والآمنة (input.required):

في الهندسة الحديثة لأنجولر، يمكنك إلزام المكون الأب بتمرير بيانات محددة للمكون الفرعي عبر استخدام دالة input.required<T>(). إذا نسي المطور تمرير هذه البيانات، سيُظهر مترجم الكود خطأ فوري أثناء مرحلة البناء، مما يمنع الأخطاء غير المتوقعة في واجهة المستخدم.

التفاعل المباشر مع الإشارات المحسوبة:

بما أن الـ input الجديد يُعاد بناءه كإشارة (Signal)، فإنه يمكنك تمريره مباشرة داخل الدوال المحسوبة (computed) أو التأثيرات (effects) لإنشاء مسارات بيانات تفاعلية ونقية تتحدث لحظياً فور وصول أي قيمة جديدة من الأب.

أمثلة برمجية: بناء مكون فرعي يستقبل الخصائص الحديثة

المثال الأول: تصميم مكون فرعي لعرض بيانات الملف الشخصي باستخدام input الحديثة

typescript
1import { Component, input } from '@angular/core';
2
3@Component({
4 selector: 'app-user-badge',
5 standalone: true,
6 template: `
7 <div class="badge-card">
8 <h4>بطاقة المستخدم الفرعية</h4>
9 <!-- قراءة قيمة الـ input الحديثة كدالة -->
10 <p>اسم المستخدم: <strong>{{ userName() }}</strong></p>
11 <p>رقم العضوية: <strong>{{ memberId() }}</strong></p>
12 </div>
13 `
14})
15export class UserBadgeComponent {
16 // تعريف إدخال اختياري بقيمة افتراضية
17 userName = input<string>('مزارع مجهول');
18
19 // تعريف إدخال إلزامي لا يمكن تخطيه من المكون الأب
20 memberId = input.required<number>();
21}

أمثلة برمجية: ربط المكون الأب بالمكون الفرعي وتمرير البيانات

المثال الثاني: المكون الرئيسي الذي يزود المكون الفرعي بالبيانات والخصائص

typescript
1import { Component, signal } from '@angular/core';
2import { UserBadgeComponent } from './user-badge.component';
3
4@Component({
5 selector: 'app-parent-dashboard',
6 standalone: true,
7 imports: [UserBadgeComponent],
8 template: `
9 <div class="dashboard-box">
10 <h3>لوحة التحكم الرئيسية للأب</h3>
11
12 <!-- تمرير البيانات للمكون الفرعي بأمان -->
13 <app-user-badge
14 [userName]="currentUser()"
15 [memberId]="currentId()">
16 </app-user-badge>
17
18 <button (click)="changeUserData()">تغيير بيانات المستخدم</button>
19 </div>
20 `
21})
22export class ParentDashboardComponent {
23 currentUser = signal('أحمد مطر');
24 currentId = signal(5042);
25
26 changeUserData() {
27 this.currentUser.set('سارة المهندس');
28 this.currentId.set(9981);
29 }
30}

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

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

الدرس السابق

إيقاف آلية اكتشاف التغييرات يدوياً

الدرس التالي

ارسال البيانات والأحداث للأعلى باستخدام المخرجات

نوفيل

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

المنصة

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

الحساب

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

روابط

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

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

صُنع بـ في مصر