محتويات الدورة

Angular / الأساسي / الدرس 6

النماذج والتفاعل الميسر

استخدم نموذجًا محدد النوع بفحص صريح وتسميات أصلية وافصل رد المستخدم من ثقة الخادم وصلاحياته.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • إنشاء عناصر تحكم غير قابلة للفراغ وشرح إعادة الضبط.
  • توصيل التحكم التفاعلي باستيراد مستقل صحيح.
  • عرض الأخطاء وسلوك الإرسال بإتاحة.

يوضح نموذج التحكم القيمة والصلاحية

تمثل النماذج التفاعلية التحكم والفحص والحالة في TypeScript، وللقالبية نهج توجيهات مختلف. نختار التفاعلية ولا نمزجهما على إدخال واحد. تتتبع FormControl القيمة والصلاحية واللمس وغيرها، وتحتاج رغم النوع فاحصًا فعليًا وفحص خادم. تغير nonNullable الإعادة والنوع ولا تضمن صحة الخارج. حدّد البداية والطول والرسالة قبل DOM.

اختبار التحكم الفعلي دون ادعاء تفاعل متصفح

يستورد البرنامج دعم المترجم والحزمة المثبتة في Node معزولة. ينشئ تحكمًا فارغًا غير قابل للفراغ بوجوب وحد أدنى؛ تصح Mira وتعيد reset النص الأصلي لا null. هذه ملاحظات فعلية للنموذج لا كتابة لوحة أو عرض خطأ. يخص دعم المترجم إعداد الحزمة المحلي، فلا تنسخه بلا حاجة لكل مكوّن إنتاج. اختبر التوجيه والتسمية منفصلين.

typescript حساب تحكم تفاعلي مكتمل معزول
import "@angular/compiler";
import { FormControl, Validators } from "@angular/forms";
const name = new FormControl("", { nonNullable: true, validators: [Validators.required, Validators.minLength(3)] });
console.log(name.valid);
name.setValue("Mira");
console.log(name.valid, name.value);
name.reset();
console.log(name.valid, JSON.stringify(name.value));
الناتج المتوقع
false
true Mira
false ""

تكون السطور false وtrue Mira وfalse مع نص JSON فارغ، دون عنصر نموذج أو HTTP أو متصفح.

استيراد التوجيهات وربط تسمية مرئية

يحتاج [formControl] استيراد ReactiveFormsModule في المكوّن. يفترض المقطع name ومعالج save يرفض الفاسد. تشير label لمعرّف الإدخال ويربط aria-describedby الوصف. أظهر الخطأ بعد اللمس أو الإرسال لا قبل البدء. يجعل submit وngSubmit لوحة المفاتيح ضمن العقد. لا يثبت المقطع إعلان التقنية المساعدة؛ فذلك يحتاج فحصًا مناسبًا.

html قالب نموذج تفاعلي سياقي
<form (ngSubmit)="save()" novalidate>
  <label for="course-name">Course name</label>
  <input id="course-name" [formControl]="name" aria-describedby="name-help">
  <p id="name-help">Use at least three characters.</p>
  @if (name.invalid && name.touched) {
    <p role="status">Enter a course name of at least three characters.</p>
  }
  <button type="submit">Save</button>
</form>

مع التحكم والاستيراد المعلنين يظهر الخطأ بعد لمس الفارغ، ولا يُشغّل الصنف والتفاعل هنا.

الإرسال عملية مجال لا علم صلاحية فقط

علّم غير الصالح ملموسًا وعد دون حفظ، وابنِ طلبًا مفحوصًا للصحيح. قد تغيب المعطلة من FormGroup.value وتوجد في getRawValue؛ فاختر عمدًا. يحتاج فحص async المعلق والطلب الجاري سياسة لمنع التكرار. لا تعتبر التعطيل إذنًا أو بديل خادم. احفظ المدخل بعد فشل قابل للاستعادة وفسّر الخطوة وميّز قبول الإرسال من ثباته البعيد.

اختبار القيمة والخطأ ولوحة المفاتيح والتركيز

اختبر البداية والقبول والحد والإعادة والإرسال الفاسد ورفض الخادم. ابحث بالتسمية في المكوّن وأدخل وأرسل كما المستخدم؛ فلا يثبت setValue ربط التوجيه أو التسمية. اجعل الرسالة مفهومة لا لونًا فقط ولا تحبس التركيز. احفظ هوية التحكم في الديناميكي. تحتاج الإتاحة لوحة وتقنية مساعدة مع الفحص البنيوي؛ وصلاحية FormControl طبقة واحدة.

الأخطاء الشائعة وإصلاحها

القالب لا يتعرف ربط formControl.

لماذا يحدث؟
يغيب ReactiveFormsModule عن مالك القالب.
كيف تصلحه؟
استورده عند حد ذلك المكوّن.
كيف تتجنب تكراره؟
اختبر القالب لا صنف التحكم فقط.

تعيد reset قيمة null خلاف المتوقع.

لماذا يحدث؟
استخدم التحكم دلالة إعادة قابلة للفراغ.
كيف تصلحه؟
اختر nonNullable لإعادة القيمة الابتدائية.
كيف تتجنب تكراره؟
أدرج الإعادة في العقد.

الخادم يثق بالنموذج الصحيح على العميل.

لماذا يحدث؟
عومل فحص العرض كحد ثقة.
كيف تصلحه؟
افحص طلب الخادم وفوّضه.
كيف تتجنب تكراره؟
اختبر الطلب المشوه وغير المصرح منفصلين.

اختبر فهمك

1. اضبط التحكم على "Al" ثم "Lina" وحدّد الصلاحية وما لا تضمنه nonNullable.

اعرض الحل المشروح

تفشل Al في الطول وتنجح Lina. تعيد nonNullable النص الأصلي بدل null ولا تصحح كل نص أو تثبت إذنًا. أضف الحالتين للنموذج وافحص رسالة المكوّن بعد التفاعل المقصود.

2. يحوي FormGroup معرّفًا معطلًا مطلوبًا بالحفظ. ما الفرق بين value وgetRawValue وما الباقي؟

اعرض الحل المشروح

قد تغفل value المعطل وتضمه getRawValue. ابنِ الطلب بحقول مقصودة وافحص الهوية وإذنها بالخادم. يظل المعطل بيانات عميل لا دليل ملكية؛ اختبر المفاتيح المرسلة فعلًا.

أهم ما تعلمته

  • مثّل قيمة النموذج وصلاحيته.
  • صل التوجيه والتسمية والإرسال بوعي.
  • يبقى فحص العميل وثقة الخادم منفصلين.

المراجع الرسمية