Angular / الأساسي / الدرس 4
تدفق التحكم وهوية عناصر القائمة
اعرض التحميل والفراغ والبيانات عمدًا وأعط الصفوف هوية ثابتة توافق البيانات لا موضعها الحالي.
في هذه الصفحة
أهداف الدرس
- استخدام كتل if وfor وempty المضمنة.
- اختيار مفاتيح تتبع فريدة ثابتة للمجموعات المتغيرة.
- اختبار إعادة الترتيب وحفظ تفاعل المستخدم.
إعطاء كل حالة عرض معنى صريحًا
تحتاج القائمة سياسة للتحميل والفشل والنجاح الفارغ والممتلئ؛ ولا تميز مصفوفة فارغة الجميع. مثّل البدائل ليشرح القالب الخطوة التالية. تستخدم الكتل @if و@else و@for دون استيراد التوجيهات القديمة لصياغتها، وتظل بحاجة تعبيرات صحيحة واعتماديات فرعية. وضّح الشرط ولا تجعل قيمة صحيحة كالصفر تبدو غائبة.
حفظ المعرّف عند تغير المحتوى
يغير النموذج عنوان صف ويحفظ هويته وترتيبه. تمثل الهوية كيانًا منطقيًا وقد يتغير مرجع الكائن والموضع. يطبع البيانات فقط لا إعادة استخدام DOM. افحص التركيز وحالة الإدخال والصفوف بعد الترتيب في الاختبار الفعلي. لا تولد هوية عشوائية مع كل استجابة فتبدو الصفوف جديدة، وافحص التكرار عند حد البيانات لا في تعبير التتبع.
export {};
type Row = { id: number; title: string };
const rows: readonly Row[] = [{ id: 1, title: "Basics" }, { id: 2, title: "Forms" }];
const changed = rows.map(row => row.id === 2 ? { ...row, title: "Typed forms" } : row);
console.log(JSON.stringify(changed));
[{"id":1,"title":"Basics"},{"id":2,"title":"Typed forms"}]
يحصل الصف ذو الهوية اثنين على عنوان جديد وتبقى الهويتان، ولا يُنفذ توفيق DOM.
تتبع الكيانات وشرح النجاح الفارغ
يفترض القالب إشارات loading وitems ومعرّفًا ثابتًا فريدًا وعنوانًا. يصل track item.id الصف بكيانه عند تغير الترتيب والمرجع. تعالج @empty غياب العناصر وتعالج @if التحميل منفصلًا. استخدم $index إذا كان الموضع هو الهوية فعلًا كقائمة ثابتة؛ وتحتاج القابلة للتحرير والترتيب مفاتيح كي تحفظ رابطة DOM ولا تختلط الحالات.
@if (loading()) {
<p role="status">Loading courses</p>
} @else {
<ul>
@for (item of items(); track item.id) {
<li>{{ item.title }}</li>
} @empty {
<li>No courses match</li>
}
</ul>
}
تعرض القائمة المحملة الفارغة No courses match والممتلئة عناوينها، ولا ينفذ المقطع حالة المضيف أو DOM.
استخدام نطاق الكتلة دون إخفاء عقد البيانات
تقدم الكتل عناصر ومتغيرات محلية. سمّ التعبير الطويل للوضوح وأبقِ التصفية والترتيب ذات المعنى في حساب مختبر. لا تدعم @for عبارتي break وcontinue؛ جهز المجموعة قبل العرض. التتبع هوية لا إذن كشف، وقد يبقى المخفي بالذاكرة فيقيّد الخادم البيانات. ميّز رسالتي الفراغ والفشل واجعلهما قابلتين للإدراك.
اختبار الترتيب والاستبدال وحالة التفاعل
استخدم صفين قابلين للتحرير وركز إدخالًا وأعد الترتيب دون تغيير الهوية. افحص بقاء قيمة الكيان وسياسة التركيز في المكوّن أو المتصفح، وأضف التكرار والفراغ. لا يثبت اختبار مصفوفة هذه الضمانات أو قياس سريع الصحة. اجعل انتقال التحميل والفشل حتميًا كي لا يبدو الطلب المفقود نجاحًا فارغًا. تفيد الهوية المنطق والأداء إذا وافقت المجال واختُبرت للمستخدم.
الأخطاء الشائعة وإصلاحها
تتبع حالة الإدخال عنصرًا خاطئًا بعد الترتيب.
- لماذا يحدث؟
- استُخدم الموضع كهوية لكيانات متغيرة.
- كيف تصلحه؟
- تتبع معرّف كيان ثابتًا فريدًا.
- كيف تتجنب تكراره؟
- اختبر صفوف التحرير عند الترتيب لا النص فقط.
يعرض فشل الطلب رسالة نجاح فارغ.
- لماذا يحدث؟
- مثلت مصفوفة فارغة حالات مختلفة.
- كيف تصلحه؟
- مثّل التحميل والفشل والنجاح منفصلة.
- كيف تتجنب تكراره؟
- اختبر كل انتقال صراحة.
كل تحديث يعيد هويات الصفوف المنطقية.
- لماذا يحدث؟
- وُلدت المفاتيح مجددًا بدل حفظ هوية المجال.
- كيف تصلحه؟
- احفظ المفاتيح عبر التمثيلات المحدثة.
- كيف تتجنب تكراره؟
- افحص الهوية والفَرادة قبل العرض.
اختبر فهمك
1. أعد ترتيب الصفوف ليأتي اثنان أولًا. ما المتغير وما الثابت؟
اعرض الحل المشروح
يصير الترتيب اثنين ثم واحد ويحفظ كل صف هويته وعنوانه. يصف تتبع id العلاقة والفهرس الموضع. تؤكد المصفوفة التسلسل ويؤكد المكوّن ارتباط التحرير والتركيز بالصف المقصود.
2. يرجع الخادم سجلين بهوية واحد. لماذا لا يصلح التتبع بالعنوان عمومًا؟
اعرض الحل المشروح
قد يتكرر العنوان ويتغير فلا يثبت الهوية. أصلح البيانات أو التحويل وارفض أو سوِّ أو عيّن هويات مستقرة وفق المجال. أضف اختبار تكرار وسياسة خطأ مرئية إن تعذر التمثيل. لا تخف البيانات الفاسدة بحيلة تتبع.
أهم ما تعلمته
- مثّل حالات العرض صراحة.
- تتبع الهوية لا الموضع العرضي.
- افحص حالة المستخدم عبر تغير القائمة.