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

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

المنصة

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

الحساب

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

روابط

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

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

صُنع بـ في مصر

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

منهج Angular

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

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

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

مخرجات المكوناتAngular Outputsإرسال الأحداث للأبدالة output الحديثةAngular 22.1

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

1
معيار المخرجات البرمجيةالأسلوب التقليدي (Decorator @Output مع EventEmitter)الأسلوب الحديث المعتمد على دالة output
طريقة التعريف في صنف المكون@Output() notify = new EventEmitter<string>();notify = output<string>();
طريقة إطلاق الحدث للأعلىthis.notify.emit('رسالة الحدث');this.notify('رسالة الحدث'); (الاستدعاء كدالة مباشرة)
المرونة ونوع البياناتيتطلب استيراد فئات متعددة وإدارة صريحة للنوعأكثر سلاسة، وأقصر كتابة، ومتوافقة كلياً مع الأنظمة الحديثة
التكامل الهندسيالنمط الكلاسيكي المدعوم في الإصدارات القديمةالنمط المعياري الموصى به في Angular 22.1

الشرح

هو إرسال البيانات والأحداث للأعلى باستخدام المخرجات (Component Outputs) في إصدار Angular 22.1. بينما تستخدم الخصائص (Inputs) لتمرير البيانات للأسفل، تتيح لك المخرجات (Outputs) إعلام المكون الأب بوقوع أحداث جديدة أو إرسال بيانات نحو الأعلى، مع الاعتماد على الأسلوب الحديث والآمن الذي يتناغم تماماً مع بنية الإشارات (Signals). وكما طلبت في الدرس السابق، سنحافظ على تنوع الأكواد لتشمل قالب الواجهة (HTML) ونمط التنسيق (CSS) بجانب الأكواد البرمجية (TypeScript).

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

إرسال الأحداث كدوال مباشرة للأعلى (output API):

في النسخة الحديثة لأنجولر، لم تعد بحاجة لاستخدام EventEmitter التقليدي بشكل معقد. يمكنك تعريف المخرج بكل بساطة عبر دالة output<T>() وإرسال القيمة مباشرة نحو الأعلى عن طريق استدعاء المخرج كدالة برمجية (this.actionName(value)).

التواصل الآمن بين الشجرة الهرمية:

يتيح هذا النمط للمكون الفرعي إرسال البيانات للأعلى بكفاءة تامة، مع الحفاظ على استقلاليته الكاملة وعدم اعتماده على تفاصيل بنية المكون الأب، مما يرفع من جودة إعادة استخدام المكونات (Reusability).

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

المثال الأول: صنف الـ TypeScript للمكون الفرعي الذي يطلق الحدث للأعلى

typescript
1import { Component, output } from '@angular/core';
2
3@Component({
4 selector: 'app-item-editor',
5 standalone: true,
6 templateUrl: './item-editor.component.html',
7 styleUrl: './item-editor.component.css'
8})
9export class ItemEditorComponent {
10 // تعريف مخرج حديث يرسل نصاً للأعلى عند التعديل
11 itemSaved = output<string>();
12
13 onSave(newVal: string) {
14 if (newVal.trim()) {
15 // إرسال البيانات للأعلى مباشرة عبر استدعاء المخرج كدالة
16 this.itemSaved(newVal);
17 }
18 }
19}

أمثلة برمجية: قالب العرض HTML الخاص بالمكون الفرعي

المثال الثاني: قالب HTML للمكون الفرعي (تنوع في نوع الكود)

html
1<div class="editor-container">
2 <h4>تعديل العنصر الفرعي والإرسال للأعلى</h4>
3 <input #inputField type="text" placeholder="أدخل اسم العنصر الجديد..." />
4 <button (click)="onSave(inputField.value)">حفظ وإرسال للأب</button>
5</div>

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

المثال الثالث: ملف الـ CSS للمكون الفرعي

css
1.editor-container {
2 padding: 16px;
3 border: 2px dashed #4f46e5;
4 border-radius: 8px;
5 background-color: #f9fafb;
6 margin-top: 12px;
7}
8
9.editor-container input {
10 padding: 8px;
11 margin-right: 8px;
12 border: 1px solid #d1d5db;
13 border-radius: 4px;
14}
15
16.editor-container button {
17 padding: 8px 16px;
18 background-color: #4f46e5;
19 color: white;
20 border: none;
21 border-radius: 4px;
22 cursor: pointer;
23}

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

المثال الرابع: المكون الرئيسي الأب الذي يستمع للبيانات القادمة من الأسفل

typescript
1import { Component, signal } from '@angular/core';
2import { ItemEditorComponent } from './item-editor.component';
3
4@Component({
5 selector: 'app-main-dashboard',
6 standalone: true,
7 imports: [ItemEditorComponent],
8 template: `
9 <div class="parent-panel">
10 <h3>لوحة التحكم الرئيسية</h3>
11 <p>آخر عنصر تم استقباله من الأسفل: <strong>{{ lastItem() }}</strong></p>
12
13 <!-- الاستماع للحدث القادم من المكون الفرعي -->
14 <app-item-editor (itemSaved)="handleItemSaved($event)"></app-item-editor>
15 </div>
16 `
17})
18export class MainDashboardComponent {
19 lastItem = signal('لا يوجد عنصر بعد');
20
21 handleItemSaved(itemValue: string) {
22 // تحديث الحالة بناءً على البيانات المرسلة من الأسفل
23 this.lastItem.set(itemValue);
24 }
25}

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

  • —استخدم دالة output() الحديثة لتوحيد نمط إرسال البيانات للأعلى في تطبيقك!
  • —هذا يضمن لك تطابقاً تاماً مع معايير الأداء والأنواع في Angular 22.1، ويجعل تتبع تدفق البيانات العكسي واضحاً وخالياً من التعقيدات

الدرس السابق

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

الدرس التالي

استبدال Output بالإشارات الحديثة

نوفيل

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

المنصة

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

الحساب

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

روابط

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

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

صُنع بـ في مصر